问题描述
所以,我正在开发一个完整的堆栈 mern 应用程序,但在身份验证页面中,即使在 res.send
之后代码也会被执行
import User from "../models/user.js";
import { registerValidation } from "../validation.js";
const router = Router();
//!Hapijoi
//!
router.get("/register",async (req,res) => {
const { error } = registerValidation(req.body);
if (error) res.status(400).send(error.details[0].message);
const email = await User.findOne({ email: req.body.email });
if (email) return res.status(400).send("email exists");
const user = new User(req.body);
try {
const saveduser = await user.save();
res.send(saveduser);
} catch (error) {
console.log(error);
}
});
export default router;
因此,即使在行 if (error) res.status(400).send(error.details[0].message);
和 if (email) return res.status(400).send("email exists");
之后,数据也存储在数据库中
但我看到代码在 res.send
之后不会被执行
我该怎么办请帮忙
解决方法
您可能想要 return
以防止进一步执行代码,这可能会导致不需要的行为,以及表明响应已发送的错误。所以就这样写:
if (error) return res.status(400).send(error.details[0].message);
就像你在这里所做的一样:
if (email) return res.status(400).send("email exists");
请注意,Express 回调的返回值会被忽略,因此您可以在 return
之后写入任何内容,其目的只是停止函数执行。