Когда я пытаюсь вернуть ответ от лямбда-функции 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 ответа
Я нашел решение этой проблемы. Я сделал следующее:
res.end(JSON.stringify(respObj));
Я все еще вижу ошибку в консоли, но я получаю ответ в этом случае.
Всякий раз, когда вы видите сообщение об ошибке «Не удается установить заголовки после их отправки», это означает, что где-то вы уже отправили http-ответ и попытались сделать это снова. Я предполагаю, что настоящая проблема здесь в логике, а не в том, что у вас есть маленькие или большие данные. Может быть, некоторые оператор if неправильно настроен.
Как отметил @Vladyslav. Ошибка возникает, когда вы пытаетесь отправить ответ на уже отправленный HTTP-ответ.
Я думаю, что вы должны сделать:
return res.json(resObj)
И ошибка исчезнет.
Похожие вопросы
Новые вопросы
node.js
Node.js - это неблокирующая асинхронная среда ввода-вывода, основанная на событиях, использующая движок Google V8 JavaScript и библиотеку libuv. Он используется для разработки приложений, которые интенсивно используют возможность запуска JavaScript как на клиенте, так и на стороне сервера, и, следовательно, выигрывают от повторного использования кода и отсутствия переключения контекста.