无法设置标头

时间:2017-04-24 22:10:13

标签: javascript node.js express

我在路由中有一些基本身份验证,当使用它时会抛出控制台错误。

Error: Can't set headers after they are sent.
    at ServerResponse.OutgoingMessage.setHeader (_http_outgoing.js:356:11)
    at ServerResponse.header

仅当“if”语句为true(if语句中的代码运行)时才会发生。如果没有运行,我没有收到任何错误,“home”视图呈现没有错误。

routes.get('/scan', (req, res, next) => {
    const orderID = req.query.order;
    const token   = req.query.token;

    if (!hasAccess(token))
        res.status(401).send('Unauthorized');

    res.render('home', {order});
});

2 个答案:

答案 0 :(得分:2)

当您尝试多次回复请求时,会抛出此错误。

为避免此类错误,发送回复时应return,否则该功能将无法继续。

在你的情况下:

routes.get('/scan',  (req, res, next) => {
  const orderID = req.query.order;
  const token   = req.query.token;

  if( !hasAccess( token ) )
    return res.status(401).send('Unauthorized');
  return res.render('home', {order});
});

答案 1 :(得分:1)

您应该在return;之后添加res.status(401).send('Unauthorized');,以避免发送重复的回复。