响应数据很大时,AWS Lambda NodeJs响应错误

时间:2019-05-01 13:04:09

标签: node.js express aws-lambda

当我尝试从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);
  }

3 个答案:

答案 0 :(得分:0)

每当看到错误消息“发送头后无法设置头”,则表明您已经在某个地方发送了HTTP响应并尝试再次执行此操作。我想这里的真正问题在于逻辑,而不是事实,即您拥有小型或大型数据。也许某些if语句配置不正确。

答案 1 :(得分:0)

就像@Vladyslav提到的那样。当您尝试将响应发送到已发送的http响应时,会发生此错误。

我想你应该这样做:

return res.json(resObj)

然后看到错误消失了。

答案 2 :(得分:0)

对于此问题,我有一种解决方法。我做了以下事情:

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

我仍然可以在控制台中看到错误,但是在这种情况下,我得到了响应。