更新用户信息

时间:2019-01-11 10:06:42

标签: javascript node.js routes updates

尝试此操作以更新用户信息,仅更新电话号码,但未更新。

router.post('/edit', checkAuth, function (req, res, next) {
    console.log(req.userData.userId)
    User.update({_id: req.userData.userId}, {$set:req.userData.phoneNo}, function (err){
        if (err) {
            console.log(err);
        }
        res.status(200).send(req.userData);
    });
});

我的用户控制器 const mongoose = require('mongoose');

const User = mongoose.model('User');

module.exports.register = (req, res, next) =>{  

    var user = new User();
    user.fullName = req.body.fullName;
    user.email = req.body.email;
    user.password = req.body.password;
    user.phoneNumber = req.body.phoneNumber;
    user.save((err, doc) =>{
        if(!err)
            res.send(doc);
        else{
            if (err.code == 11000)
                    res.status(422).send(["Entered duplicate email address. Please check"]);
            else
            return next(err);
            }
    });
}

然后我通过在此字段上传递jwt进行身份验证 phoneNo: user[0].phoneNumber

auth-token验证并解码字段

const token = req.headers.authorization.split(" ")[1];
    const decoded = jwt.verify(token, process.env.JWT_KEY)
        req.userData = decoded;

更新不起作用,并显示错误消息Invalid atomic update value for $set. Expected an object, received string

2 个答案:

答案 0 :(得分:1)

首先,您应该使用PATCH方法-因为您只更新现有对象中的一个项目,因此在body中,您应该发送id用户和特定值的新值值。如果您使用mongoose,可以尝试一下 User.findOneAndUpdate({ _id: id }, updatedItem, { new: true }, (err, doc) => { if (err) return res.send(err.message) if (doc) return res.send(doc); })

const id = req.body._id;,如果您不使用猫鼬,则应尝试findAndModify方法

答案 1 :(得分:0)

您的代码

User.update({_id: req.userData.userId}, {$set:req.userData.phoneNo}

正确的代码:

User.update({_id: req.userData.userId}, {$set:{phoneNumber:req.userData.phoneNo}}

尝试此方法:

User.findByIdAndUpdate(req.userData.userId, { $set:{phoneNumber:req.userData.phoneNo}}, { new: true }, function (err, user) {
  if (err) console.log(err);
  res.send(user);
});