Ошибка ответа AWS Lambda NodeJ при больших данных ответа - PullRequest
0 голосов
/ 01 мая 2019

Когда я пытаюсь вернуть ответ от лямбда-функции 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);
  }

Ответы [ 3 ]

0 голосов
/ 01 мая 2019

Как упомянул @Vladyslav. Ошибка возникает при попытке отправить ответ на уже отправленный http-ответ.

Я бы предположил, что вы должны сделать:

return res.json(resObj)

И увидите, что ошибка исчезла.

0 голосов
/ 03 мая 2019

У меня есть обходной путь для этой проблемы.Я сделал следующее:

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

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

0 голосов
/ 01 мая 2019

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...