当我尝试从nodejs lambda函数返回响应时,出现以下错误:
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 :(得分:0)
每当看到错误消息“发送头后无法设置头”,则表明您已经在某个地方发送了HTTP响应并尝试再次执行此操作。我想这里的真正问题在于逻辑,而不是事实,即您拥有小型或大型数据。也许某些if语句配置不正确。
答案 1 :(得分:0)
就像@Vladyslav提到的那样。当您尝试将响应发送到已发送的http响应时,会发生此错误。
我想你应该这样做:
return res.json(resObj)
然后看到错误消失了。
答案 2 :(得分:0)
对于此问题,我有一种解决方法。我做了以下事情:
res.end(JSON.stringify(respObj));
我仍然可以在控制台中看到错误,但是在这种情况下,我得到了响应。