node.js - NodeJS 流出 AWS Lambda 函数

标签 node.js amazon-web-services express aws-lambda

我们正在尝试将我们的 zip 微服务从 nodejs Express 中的常规应用程序迁移到与 AWS Lambda 集成的 AWS API Gateway。
我们当前的应用程序向我们的 API 发送请求,获取附件列表,然后访问这些附件并将其内容以 zip 存档的形式通过管道返回给用户。它看起来像这样:

module.exports = function requestHandler(req, res) {

  //...
  //irrelevant code
  //...

  return getFileList(params, token).then(function(fileList) {
    const filename = `attachments_${params.id}`;
    res.set('Content-Disposition', `attachment; filename=${filename}.zip`);

    streamFiles(fileList, filename).pipe(res); <-- here magic happens
  }, function(error) {
    errors[error](req, res);
  });
};

除了必须从 Lambda 函数中流式传输内容的部分,我已经设法完成了所有事情。
我认为一种可能的解决方案是使用 aws-serverless-express,但我想要一个更优雅的解决方案。

有人有什么想法吗?甚至可以流出 Lambda 吗?

最佳答案

不幸的是,lambda 不支持流作为事件返回值。 (很难在文档中明确提及它,除非注意在工作 documentation 中如何描述调用和上下文/回调)。

对于您的示例,您必须等待 streamFiles,然后返回完成的结果。

(aws-serverless-express 在这里无济于事,如果您检查代码,它们会等待您的管道在返回之前完成:https://github.com/awslabs/aws-serverless-express/blob/master/src/index.js#L68)

注意这里有一个细微差别,许多语言 SDK 支持流式传输请求/响应,但这意味着连接到流传输,例如流从 lambda 下载完整的响应,而不是监听从 lambda 发出的流。

关于node.js - NodeJS 流出 AWS Lambda 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53149186/

相关文章:

javascript - Passport.js 仅重定向到失败页面,不调用 LocalStrategy

node.js - ( Node js)-类型错误: Cannot call method 'getData' of undefined

node.js - Node zip 文件夹路径错误

javascript - Nodejs request.get 响应 "Web Page Blocked!"

javascript - Node.js 类模块系统

python - 我正在尝试安装 skytools 以便将数据库迁移到 Amazon RDS,但出现错误

javascript - MongoDB, Mongoose ,更新数组内的对象

java - 使用 IAM 角色从 Java 访问 AWS S3

iis - 如何在没有域名的情况下访问 AWS EC2 上的站点

javascript - 平均堆栈 : Cannot read property 'companyTitle' of undefined