在我的用户路线内。
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()
。