我目前正在建立我的应用程序使用Express和 Mongoose 后端。我希望能够更新新的详细信息现有的用户。
目前,我的流程是用户使用/signup
端点和电子邮件/密码。然后他们使用/login
端点获取令牌。
我能够成功地将具有GET
的用户获取到/profile
端点,但我希望能够使用JSON对象将POST
获取到/profile
端点,并将这些值添加到用户模型中。
我看了 Mongoose 的文档和这里,似乎没有什么对我有用。
我知道我得到了正确的用户,但它甚至没有被更新。即使当我检查数据库时,它也没有更新。
而catch并没有捕捉到任何错误。
router.post('/profile', async (req, res, next) => {
const { _id } = req.user;
const { firstName, lastName, role } = req.body;
try {
const user = await UserModel.findOneAndUpdate(
{ _id: _id },
{
$set: {
firstName,
lastName,
role,
},
}
);
console.log(user);
} catch (error) {
console.error('Error updating user:', error);
res.status(500).json({ message: 'Internal Server Error' });
}
res.send({});
});
字符串
3条答案
按热度按时间l7wslrjt1#
使用
findByIdAndUpdate
会更好,因为需要通过文档的ObjectId
找到它。此外,需要添加{new: true}
以返回修改后的文档:字符串
作为另一种选择,您可以使用
then-catch
而不是try-catch
来使代码更简单,更清晰:型
此外,如果
req.body
只包含更新字段,那么您可以将其用作一种简短的方式:(但是,通过从请求中获取属性来创建更新模型会更清晰!)
型
这里是文档链接:Mongoose - findByIdAndUpdate
霍普,这很清楚也很有帮助
uxh89sit2#
需要在fincOneAndUpdate对象中设置**
new:true
**。0ejtzxu13#
我解决了。我会怪我是新手而且太晚了。
但是我在UserModel上没有新的字段,所以mongoose不知道如何处理新的数据。
当我将字段添加到UserModel中时,我的代码第一次工作。
谢谢大家的帮助,它确实有助于调试。