NodeJS / Mongoose:exports.function和module.exports不兼容

时间:2015-07-14 15:18:11

标签: node.js mongodb mongoose schema

这是我的User.js

    var mongoose = require('mongoose');
    var bcrypt = require('bcrypt-nodejs');

    var UserSchema = mongoose.Schema({
        email: {
            type: String,
            unique: true
        },
        password: String,
    });

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

    function createDefaultUsers() {
        User.find({}).exec(function (err, collection) {
            if (collection.length === 0) {
                User.create({
                    email:  'name@eemail.com',
                    password: 'password0',
                });
    }

    exports.createDefaultUsers = createDefaultUsers;
    module.exports = mongoose.model('User', UserSchema);

我在另一个文件中调用createDefaultUsers来创建初始用户。

但是当这给我以下错误时:

  

userModel.createDefaultUsers();                 ^ TypeError:对象函数模型(doc,fields,skipId){       if(!(此实例模型))         返回新模型(doc,fields,skipId);       Model.call(this,doc,fields,skipId);没有方法' createDefaultUsers'

但是,如果我评论module.exports = mongoose.model('User', UserSchema);,那么它编译得很好。 我做错了什么。

干杯。

1 个答案:

答案 0 :(得分:3)

在这种情况下,您应该将该函数作为静态方法附加并导出模型。

var mongoose = require('mongoose');
var bcrypt = require('bcrypt-nodejs');

var UserSchema = mongoose.Schema({
    email: {
        type: String,
        unique: true
    },
    password: String,
});

UserSchema.statics.createDefaultUsers = function createDefaultUsers(cb) {
    return User.find({}).exec(function (err, collection) {
        if (collection.length === 0) {
            User.create({
                email:  'name@eemail.com',
                password: 'password0',
            }, cb);
        } else {
            if (cb) {
                 cb(err, collection);
            }
        }
    });
};

var User = mongoose.model('User', UserSchema);
module.exports = User;

现在您可以直接在模型中使用它(这可能与您已经使用它的方式非常相似):

require('./models/user').createDefaultUsers();