【问题标题】:code is getting executed even after res.send即使在 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; 语句。

标签: javascript node.js express jwt joi


【解决方案1】:

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

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

就像你在这里做的那样:

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

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

【讨论】:

    猜你喜欢
    • 2013-04-17
    • 2012-05-26
    • 1970-01-01
    • 2017-10-19
    • 1970-01-01
    • 2017-10-21
    • 2015-02-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多