【问题标题】:Cannot set headers after they are sent to the client (Node.js)将标头发送到客户端后无法设置标头 (Node.js)
【发布时间】:2022-11-30 02:58:31
【问题描述】:

所以基本上,当我尝试登录用户时输入错误的密码或用户名,然后尝试使用正确的凭据登录时,我会收到此错误。

Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
    at new NodeError (node:internal/errors:371:5)
    at ServerResponse.setHeader (node:_http_outgoing:576:11)
    at ServerResponse.header (D:\ecom website\ecom backend\node_modules\express\lib\response.js:794:10)
    at ServerResponse.send (D:\ecom website\ecom backend\node_modules\express\lib\response.js:174:12)
    at ServerResponse.json (D:\ecom website\ecom backend\node_modules\express\lib\response.js:278:15)
    at D:\ecom website\ecom backend\routes\auth.js:57:21
    at processTicksAndRejections (node:internal/process/task_queues:96:5) {
  code: 'ERR_HTTP_HEADERS_SENT'
}
[nodemon] app crashed - waiting for file changes before starting...

这是我在 auth.js 中的代码


//LOGIN

router.post('/login', async (req, res) => {
  try {
    const user = await User.findOne({
      username: req.body.username,
    });

    !user && res.status(401).json('Wrong User Name');

    const hashedPassword = CryptoJS.AES.decrypt(
      user.password,
      process.env.PASS_SEC
    );
    const originalPassword = hashedPassword.toString(CryptoJS.enc.Utf8);

    const inputPassword = req.body.password;

    originalPassword != inputPassword && res.status(401).json('Wrong Password');

    const accessToken = jwt.sign(
      {
        id: user._id,
        isAdmin: user.isAdmin,
      },
      process.env.JWT_SEC,
      { expiresIn: '3d' }
    );

    const { password, ...others } = user._doc;
    res.status(200).json({ ...others, accessToken });
  } catch (err) {
    res.status(500).json(err);
  }
});

我应该怎么办?我的代码有问题吗?

【问题讨论】:

    标签: javascript node.js reactjs backend


    【解决方案1】:

    我看到您在代码中多次使用 res.status(code).json(content) 命令,但您在发送响应后从未退出该函数。结果,在一个这样的命令之后 - 代码将在函数中继续并尝试发送另一个响应,这就是您收到错误的地方:服务器正在尝试为一个请求发送多个响应。

    【讨论】:

    • 那么我怎样才能解决这个问题并且能够发送两个响应呢?
    猜你喜欢
    • 2020-09-05
    • 2021-06-18
    • 2022-01-14
    • 2021-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多