Когда я пытаюсь вернуть ответ от лямбда-функции nodejs, я получаю следующую ошибку:

Can't set headers after they are sent Error: Can't set headers after they are sent at validateHeader

Если длина ответа мала, то я получаю его в ответе.

Я попытался отправить жестко закодированные данные и заметил то же самое - получить вывод для небольших данных, но не для больших данных.

Ошибка присутствует в обоих случаях, но я получаю ответ, если длина данных мала.

Как мы можем решить это?

Добавление части кода для рецензирования:

let videoInstance = await _searchVideo();

    if (!videoInstance) {
      const err = new APIError('Video not found!', HTTPStatus.NOT_FOUND, true);
      return next(err);
    }
    let collections = await parseVideoList([videoInstance]);
    if (req.accessToken && req.accessToken.obj) {
      collections = _.filter(collections, collection => {
        return collection.subscribed;
      });
    }
    let respObj = {
      _embedded: {
        collections
      }
    }

    res.json(respObj);
  } catch (exec) {
    return next(exec);
  }
0
SINDHYA PETER 1 Май 2019 в 16:04

3 ответа

Лучший ответ

Я нашел решение этой проблемы. Я сделал следующее:

res.end(JSON.stringify(respObj));

Я все еще вижу ошибку в консоли, но я получаю ответ в этом случае.

0
PETER 3 Май 2019 в 11:58

Всякий раз, когда вы видите сообщение об ошибке «Не удается установить заголовки после их отправки», это означает, что где-то вы уже отправили http-ответ и попытались сделать это снова. Я предполагаю, что настоящая проблема здесь в логике, а не в том, что у вас есть маленькие или большие данные. Может быть, некоторые оператор if неправильно настроен.

0
Vladyslav Usenko 1 Май 2019 в 14:44

Как отметил @Vladyslav. Ошибка возникает, когда вы пытаетесь отправить ответ на уже отправленный HTTP-ответ.

Я думаю, что вы должны сделать:

return res.json(resObj)

И ошибка исчезнет.

0
iwaduarte 1 Май 2019 в 14:48