我该如何解决我在使用 findOneAndUpdate 时遇到的问题
how do I fix this problem I'm having with findOneAndUpdate
正在尝试使用 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");
}
}
);
我想 return 更新后的用户,但我一直发现错误 return 500。
bcrypt.genSalt 和哈希方法 return 承诺,所以你需要等待。
另外,我将 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");
}
}
);
正在尝试使用 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");
}
}
);
我想 return 更新后的用户,但我一直发现错误 return 500。
bcrypt.genSalt 和哈希方法 return 承诺,所以你需要等待。
另外,我将 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");
}
}
);