基于JWT令牌的Node JS更新

时间:2019-01-02 14:21:46

标签: node.js jwt

在Node js中,我尝试将数据更新到数据库

但是我不想在paramenter中发送任何ID,而不是我可以从令牌中获取的ID,然后我将进行更新

这是我在控制器中的更新代码

router.put('/', VerifyToken, function (req, res) {
    var token = req.headers['x-access-token'];
    decoded = jwt.verify(token, config.secret);
    User.findById(decoded.id, { password: 0 }, function (err, user) {
        if (err) return res.status(500).send("There was a problem finding the user.");
        if (!user) return res.status(404).send("No user found.");
        var curtime = dateFormat(now, "HH:MM:ss"),
            curstatus = 'Test';
        const reportData = new Report({
            username: user.username,
            time: curtime,
            status: curstatus
        });
        Report.findByIdAndUpdate({ username : user.username},reportData)
            .then(report => {
                if (!report) {
                    return res.status(404).send({
                        message: "Report not found with Username " + user.username
                    });
                }
                res.send(report);
            }).catch(err => {
                if (err.kind === 'ObjectId') {
                    return res.status(404).send({
                        message: "Report not found with Username " + user.username
                    });
                }
                return res.status(500).send({
                    message: "Error updating report with Username " + user.username
                });
            });

    });

});

它总是返回以下唯一消息:“找不到带有用户名的报告” + user.username

1 个答案:

答案 0 :(得分:0)

findByIdAndUpdate通过_id字段查找文档。参见findByIdAndUpdate。 第一个参数必须是_id字段的值。 username不是_id

尝试

const reportData = {
   username: user.username,
   time: curtime,
   status: curstatus
}
Report.findOneAndUpdate({username : user.username}, reportData)