gpt4 book ai didi

javascript - 如何解决 findOneAndUpdate 遇到的这个问题

转载 作者:行者123 更新时间:2023-11-28 16:58:10 24 4
gpt4 key购买 nike

尝试使用findOneAndUpdate方法更新mongodb文档

尝试以各种方式查找文档并以不同的方式重新格式化更新

router.put(
"/edit",
[
auth,
[
check("name", "Name is required")
.not()
.isEmpty(),
check("email", "Please enter a valid email").isEmail(),
check(
"password",
"Please enter a password with 8 or more characters"
).isLength({ min: 8 })
]
],
async (req, res) => {
const errors = validationResult(req);
if (!errors.isEmpty()) {
res.status(404).json({ errors: errors.array() });
}

const { email, password, name } = req.body;

const update = {
email,
password,
name
};

const salt = bcrypt.genSalt(10);

update.password = bcrypt.hash(password, salt);

try {
const user = await User.findOneAndUpdate(
{ user: req.user.id },
{ $set: update },
{ new: true, upsert: true }
);
res.json(user);
} catch (err) {
console.error(err);
res.status(500).send("Server Error");
}
}
);

我希望它返回更新后的用户,但我不断捕获错误并返回 500。

最佳答案

bcrypt.genSalt 和 hash 方法返回 Promise,因此您需要等待。

此外,我将 findOneAndUpdate 更改为 findByIdAndUpdate,我认为在这种情况下更清晰。

你能尝试一下这个代码吗?

router.put(
"/edit",
[
auth,
[
check("name", "Name is required")
.not()
.isEmpty(),
check("email", "Please enter a valid email").isEmail(),
check(
"password",
"Please enter a password with 8 or more characters"
).isLength({ min: 8 })
]
],
async (req, res) => {
const errors = validationResult(req);
if (!errors.isEmpty()) {
res.status(404).json({ errors: errors.array() });
}

const { email, password, name } = req.body;

const update = {
email,
password,
name
};

const salt = await bcrypt.genSalt(10);

update.password = await bcrypt.hash(password, salt);

try {
const user = await User.findByIdAndUpdate(req.user.id, update, {
new: true,
upsert: true
});
res.json(user);
} catch (err) {
console.error(err);
res.status(500).send("Server Error");
}
}
);

关于javascript - 如何解决 findOneAndUpdate 遇到的这个问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58499147/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com