2014-06-29 67 views
0

我正在用ActionHero js和Mongoose创建一些其他API。 我把Mongoose代码放在initalizers中,一切正常。 当我修改一些文件的项目自动重新编译并返回以下错误:OverwriteModelError:ActionHero js with Mongoose

Cannot overwrite User model once compiled.

我应该如何修改我的代码来避免这个错误? '严格使用';

var mongoose = require('mongoose'); 


exports.mongo = function(api, next) { 

    mongoose.connect(api.config.mongo.host); 

    var db = mongoose.connection; 
    db.on('error', console.error.bind(console, 'connection error:')); 
    db.once('open', function callback() { 
     console.log('Connection opened'); 
    }); 

    var Schema = mongoose.Schema, 
     Types = mongoose.Schema.Types; 

    var userSchema = mongoose.Schema({ 
     createdAt: { type: Date, default: Date.now(), required: true}, 
     updatedAt: { type: Date, required: false}, 
     email: { type: String, required: true }, 
     name: { type: String, required: true }, 
     surname: { type: String, required: true }, 
     password: { type: String, required: true }, 
     roles: [], 
     tokens: [{ 
      code: String, 
      expiryDate: { type: Date, default: Date.now() + 30 } 
     }] 
    }); 


    var User = mongoose.model('User', userSchema); 

    var postSchema = mongoose.Schema({ 
     createdAt: { type: Date, default: Date.now(), required: true}, 
     updatedAt: { type: Date, required: false}, 
     content: { type: String, required: true }, 
     votes: { type: [Types.ObjectId], ref: 'User' } , 
     coordinates: { type: [Number], index: { type: '2dsphere' }, required: true }, 
     creator: { type: Schema.Types.ObjectId, ref: 'User', required: true } 
    }); 


    var Post = mongoose.model('Post', postSchema); 

    api.mongo = { 
     mongoose: mongoose, 
     user: User, 
     post: Post 
    }; 

    next(); 
}; 

回答

1

如果您处于developmentMode中,actionhero将重新加载任何初始化程序。您应该将连接步骤封装在_start()块中,而不是让它们每次都以内联方式运行。这样,actionhero可以重新加载文件,而不是重新运行连接步骤。

http://actionherojs.com/docs/core/initializers.html

+0

哇,谢谢!真简单! – Mino