【问题标题】:TypeError: User is not a constructorTypeError:用户不是构造函数
【发布时间】:2017-08-02 12:43:05
【问题描述】:

我正在尝试使用以下发布请求将用户保存到 mongodb 数据库,但我收到错误 TypeError: User is not a function. 这是一个非常简单的代码设置,但我无法弄清楚它有什么问题。

我正在使用:
猫鼬 4.8.6
快递 4.15.2
节点 6.6

// models/user.js
var mongoose = require('mongoose');
var Schema = mongoose.Schema;

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

// server.js
var User = require('./models/user');

app.post('/create-user', function(req, res, next) {
    var user = new User(); // TypeError: User is not a constructor
    user.email = req.body.email;
    user.password = req.body.password;

    user.save(function(err) {
        if (err) return next(err);
        res.json('Successfully register a new user');
    });
});

【问题讨论】:

  • 如果您共享用户模块会更好,因为问题与此有关。

标签: javascript express mongoose


【解决方案1】:

您需要从您的UserSchema 创建model,然后将其导出,然后您可以创建新的用户对象。

// models/user.js
var mongoose = require('mongoose');
var Schema = mongoose.Schema;

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

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

【讨论】:

  • 你好内纳德,即使我正在做建议的事情。但我仍然遇到同样的错误。
  • 我的环境:MacOS mongoose 4.11.0 express 4.15.3 node 9.5.0
  • 我的模型文件:user.model.js var mongoose = require('mongoose'); var userSchema = new mongoose.Schema( { userid: String, name: { type: String, required: true }, }); const user = module.exports = mongoose.model('user', userSchema); //这也给出了同样的问题。 //module.exports = mongoose.model('user', userSchema );
【解决方案2】:

您收到该错误是因为您错误地导出了模块,
在我的模型/用户的情况下,我写了module.export,最后省略了s
当您运行代码时,它会为您提供该错误
我建议检查您的module.exports = mongoose.model('User', UserSchema) 拼写

【讨论】:

    【解决方案3】:
    // models/user.js
    var mongoose = require('mongoose');
    var Schema = mongoose.Schema;
    var UserSchema = new Schema({
        email: {
            type: String,
            unique: true,
            lowercase: true
    },
        password: String
    });
    
    var User = mongoose.model('User', UserSchema)
    module.exports =  { User } <-- capital 'U'
    

    【讨论】:

      【解决方案4】:

      将小写的 user 变量更改为大写(如下所示)很奇怪:

      const User = mongoose.model('users');

      我真的认为这只是一个最佳实践,但最终似乎是强制性的。

      【讨论】:

        【解决方案5】:

        把这个var user = new User();换成这个var User = new User();

        【讨论】:

          【解决方案6】:

          我也遇到了同样的错误,但这对我有用。

          我确实更改了我的导出文件

          var User = mongoose.model('User',userSchema);
          module.exports = {User};
          

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

          【讨论】:

            猜你喜欢
            • 2017-04-08
            • 2019-08-14
            • 2021-02-06
            • 2018-08-22
            • 2018-06-27
            • 2016-04-16
            • 2021-11-26
            相关资源
            最近更新 更多