TypeError:User不是构造函数

时间:2017-03-12 13:00:57

标签: javascript express mongoose

我正在尝试使用post请求将用户保存到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');
    });
});

enter image description here

6 个答案:

答案 0 :(得分:5)

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

// 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)

答案 1 :(得分:1)

// 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'

答案 2 :(得分:0)

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

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

我真的认为这只是一种最佳做法,但最终似乎是强制性的。

答案 3 :(得分:0)

将此var user = new User();更改为此var User = new User();

答案 4 :(得分:0)

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

我确实更改了导出文件

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

收件人

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

答案 5 :(得分:0)

你得到那个错误是因为你错误地导出了模块,
在我的模型/用户中,我写了 module.export 在末尾省略了 s
当你运行代码时,它会给你那个错误
我建议检查您的 module.exports = mongoose.model('User', UserSchema) 拼写