首页 > 解决方案 > 即使在 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 我应该做什么之后执行,请帮助

标签: javascriptnode.jsexpressjwtjoi

解决方案


您可能希望return防止进一步的代码执行,这可能导致不需要的行为,以及表明响应已发送的错误。所以写这个:

if (error) return res.status(400).send(error.details[0].message);

就像你在这里做的那样:

if (email) return res.status(400).send("email exists");

请注意,Express 回调的返回值被忽略,因此您可以在 之后编写任何内容return,其目的只是停止函数执行。


推荐阅读