У меня есть некоторая базовая аутентификация на маршруте, который при использовании выдает ошибку консоли.

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

Это происходит только в том случае, если оператор «if» является истинным (выполняется код внутри оператора if). Когда это не запускается, я не получаю никакой ошибки, и «домашний» вид отображается без ошибок.

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});
});
1
Jim M 25 Апр 2017 в 01:10

2 ответа

Лучший ответ

Вы должны добавить return; после своего res.status(401).send('Unauthorized');, чтобы избежать отправки дублирующего ответа.

1
mscdex 24 Апр 2017 в 22:11

Эта ошибка выдается, когда вы пытаетесь ответить на ваш запрос более одного раза.

Чтобы избежать такого рода ошибок, вы должны 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});
});
2
boehm_s 24 Апр 2017 в 22:19
43598518