尝试此操作以更新用户信息,仅更新电话号码,但未更新。
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
。
答案 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);
});