类型错误:用户不是构造函数

问题描述 投票:0回答:7

我试图使用如下的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');
    });
});

javascript express mongoose
7个回答
14
投票

您需要从您的

model
创建
UserSchema
然后将其导出,然后您就可以创建新的 User 对象。

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

5
投票

您收到该错误是因为您错误地导出了模块,
就我而言,在模型/用户中,我写了

module.export
,最后省略了
s

当您运行代码时,它会给出该错误
我建议检查你的
module.exports =  mongoose.model('User', UserSchema)
拼写


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'

1
投票

将小写的

user
变量更改为大写(如下所示),效果很奇怪:

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

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


1
投票

我也面临同样的错误,但这对我有用。

我确实更改了导出文件

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

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

0
投票

更改此

var user = new User();
为此
var User = new User();


0
投票

我也遇到了同样的问题,但我在导出文件时没有错误,并且其余所有代码也都很好。

我的代码的唯一问题是我导入了如下模型:

const { User } = require('./Database/Models/UserModel');

由于我从 UserModel.js 文件中仅导出了一个模型,因此在导入模型时不应使用 {}

正确的导入方式是:

const User = require('./Database/Models/UserModel');

我的问题得到了解决。

© www.soinside.com 2019 - 2024. All rights reserved.