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

Posted

技术标签:

【中文标题】即使在 res.send 之后,代码也会被执行【英文标题】:code is getting executed even after res.send 【发布时间】:2021-08-14 02:20:23 【问题描述】:

所以,我正在开发一个完整堆栈的 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 之后执行 请问我应该怎么做

【问题讨论】:

res.send() 只是一个常规的函数调用。您的函数体继续执行连续的代码行,就像在任何其他函数调用之后一样。如果要退出函数,请在res.send() 之后添加return; 语句。 【参考方案1】:

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

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

就像你在这里做的那样:

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

注意,Express 回调的返回值被忽略,所以你可以在return 之后写任何东西,其目的只是停止函数执行。

【讨论】:

以上是关于即使在 res.send 之后,代码也会被执行的主要内容,如果未能解决你的问题,请参考以下文章

即使出现错误,onCompleted 的 useMutation 也会被执行

即使在被注释掉之后,jQuery 代码仍然在执行

为啥即使在增加执行时间之后,我在本地的 Word press 中也会出现 max_execution_time 错误?

即使在 VB.NET 中使用 ORDER BY 子句,Oracle DataReader 也会被排序

在 Angular 7 中,为啥即使只订阅一次 HttpClient.post 也会执行两次?

即使 Expressjs 中存在错误处理程序,AWS 也会显示它自己的错误屏幕