繁体   English   中英

保存猫鼬数据时出错

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM