即使在 res.send 之后代码也会被执行

问题描述

所以,我正在开发一个完整的堆栈 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 之后写入任何内容,其目的只是停止函数执行。