[英]Error in saving mongoose data
在我的用户路线内。
var User = require('../models/user'); router.route('/verify') .get( (req, res) => { res.render('verify'); }) .post( (req, res, next) => { const {secretToken} = req.body; const user = User.findOne({'secretToken' : secretToken}); if(!user) { req.flash('error_msg', 'No user found'); res.redirect('/users/verify'); return; } user.active = true; user.secretToken = ''; user.save(); req.flash('success_msg','Thank you.You can now login'); res.redirect('/users/login'); });
那是我的模特
var userSchema = new mongoose.Schema({ username : { type : String, index : true }, password : { type : String }, email : { type : String, unique : true }, password : { type : String }, secretToken : { type : String }, active : { type : Boolean } }); var User = module.exports = mongoose.model('User', userSchema);
我设置了一条验证路线,用户将在其中发布他的/她的secretToken,如果secretToken与数据库匹配,则该secretToken将变为null,并且我的布尔元素active将由false变为true。所以首先我要从数据库中获取secret token,然后我正在与用户提供的那个进行检查,如果匹配,那么我正在更改我的secretToken并处于活动状态,但是问题是我无法保存它。它向我显示此错误。
TypeError:user.save不是一个函数
我的问题不在于创建用户,它在于更新已创建用户的信息。
问题在这里:
const user = User.findOne({'secretToken' : secretToken});
findOne返回一个猫鼬的承诺,您正在等待。 您可能希望在调用user.save()
时拥有该文档,但事实并非如此。 您只需要等待findOne()
,然后应该可以在该文档上调用.save()
。
我建议您做的是:
var User = require('../models/user');
router.route('/verify')
.get((req, res) => {
res.render('verify');
})
.post((req, res, next) => {
const {
secretToken
} = req.body;
User.findOne({
'secretToken': secretToken
}, (user) => {
if (!user) {
req.flash('error_msg', 'No user found');
res.redirect('/users/verify');
return;
}
user.active = true;
user.secretToken = '';
user.save();
req.flash('success_msg', 'Thank you.You can now login');
res.redirect('/users/login');
});
});
我在这里使用了回调,您也可以使用promise,然后使用babel尝试异步等待功能,但这对我有用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.