保存猫鼬数据时出错

时间:2017-11-30 12:55:59

标签: javascript node.js mongodb

在我的用户路线中。



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不是函数

我的问题不在于创建用户,而在于更新已创建用户的信息。

2 个答案:

答案 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等待函数,但这对我有用。