在我的用户路线中。
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将uodated为null,我的布尔元素将从false变为true。所以我首先采取秘密令牌从数据库,然后我检查它与用户给予的,如果匹配,然后我正在改变我的secretToken和活动但问题是我保存它。它显示我这个错误。
TypeError:user.save不是函数
我的问题不在于创建用户,而在于更新已创建用户的信息。
答案 0 :(得分:1)
问题在于:
getPlayers() {
this.http.get(this.ROOT_URL).subscribe(data => {
console.log(data);
//this.players = data;
});
}
findOne返回您未等待的Mongoose承诺。您可能希望在致电const user = User.findOne({'secretToken' : secretToken});
时获得该文档,但事实并非如此。您只需要等待user.save()
,然后您就可以在该文档上致电findOne()
。
答案 1 :(得分:1)
我建议你做的是:
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');
});
});
我在这里使用了一个回调,你也可以使用promises,然后尝试使用babel async等待函数,但这对我有用。