在我的用户路线内。



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

09-05 12:13