即使在 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 也会被执行
为啥即使在增加执行时间之后,我在本地的 Word press 中也会出现 max_execution_time 错误?
即使在 VB.NET 中使用 ORDER BY 子句,Oracle DataReader 也会被排序