我试图使用如下的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');
});
});
您需要从您的
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)
您收到该错误是因为您错误地导出了模块,
就我而言,在模型/用户中,我写了
module.export
,最后省略了 s
module.exports = mongoose.model('User', 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
});
var User = mongoose.model('User', UserSchema)
module.exports = { User } <-- capital 'U'
将小写的
user
变量更改为大写(如下所示),效果很奇怪:
const User = mongoose.model('users');
我真的认为这只是一个最佳实践,但最终似乎是强制性的。
我也面临同样的错误,但这对我有用。
我确实更改了导出文件
var User = mongoose.model('User',userSchema);
module.exports = {User};
至
module.exports = mongoose.model('User', userSchema);
更改此
var user = new User();
为此var User = new User();
我也遇到了同样的问题,但我在导出文件时没有错误,并且其余所有代码也都很好。
我的代码的唯一问题是我导入了如下模型:
const { User } = require('./Database/Models/UserModel');
由于我从 UserModel.js 文件中仅导出了一个模型,因此在导入模型时不应使用 {}。
正确的导入方式是:
const User = require('./Database/Models/UserModel');
我的问题得到了解决。