【问题标题】:NodeJS/Mongoose: exports.function and module.exports incompatibilityNodeJS/Mongoose:exports.function 和 module.exports 不兼容
【发布时间】:2015-10-03 07:54:15
【问题描述】:

这是我的 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(); ^ 类型错误:对象函数模型(文档、字段、skipId){ if (!(this instanceof model)) 返回新模型(文档,字段,skipId); Model.call(this, doc, fields, skipId); } 没有方法'createDefaultUsers'

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

干杯。

【问题讨论】:

  • 我不明白你为什么使用exports.createDefaultUsers = createDefaultUsers;。您要么导出模型,要么导出其他东西,而不是两者都导出,除非导出包含两者的对象。
  • @KevinB 我需要导出该函数,以便在初始化期间从另一个模块调用。有更好的方法吗?
  • 您可以将其附加到模型或架构,请参见此处:mongoosejs.com/docs/guide.html(实例方法和静态方法)
  • 谢谢凯文。我将其更改为“UserSchema.methods.createDefaultUsers = function () {”但仍然出现相同的错误。

标签: node.js mongodb mongoose schema


【解决方案1】:

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

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();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-02
    • 1970-01-01
    • 2018-12-17
    • 2017-05-21
    • 2020-08-31
    • 1970-01-01
    • 2014-03-12
    相关资源
    最近更新 更多