如何将承诺返回到serverless-http

问题描述 投票:1回答:2

我试图使用serverless-http将快速应用程序部署到AWS lambda。但是我的应用程序需要调用init()函数来加载路由以及其他东西,然后返回一个promise。

const serverless = require('serverless-http');
const Core = require('./core')

module.exports.handler = Core.init(process.cwd())
.then(Core => serverless(Core.Server))
.catch(err => console.log(err))

问题是无服务器-http需要将module.exports.handler分配给serverless函数调用而不是promise。

我也尝试过这个

const Core = require('./core')

Core.init(process.cwd())
.then(Core => module.exports.handler = serverless(Core.Server))
.catch(err => console.log(err))

但这也不合适。

javascript amazon-web-services aws-lambda serverless
2个回答
0
投票

简短的回答:“你不能”。但基于图书馆的source code,它不期望handler有任何回报价值。但是你可以进行异步调用,因为source code处理程序的finish显示它向响应套接字添加了一个事件监听器。


0
投票

是啊。正如Siggy所说,没有办法将承诺直接返回给出口处理程序。但是所有的serverless-http都会返回一个函数,它将express应用程序包装在代理中并接受lambda参数。

所以这就是我想出来的。实际上工作得很好。

const serverless = require('serverless-http');
const Core = require('./core')

module.exports.handler = function(evt, ctx, callback) {
  Core.init(process.cwd())
  .then(Core => serverless(Core.Server))
  .then(proxy => proxy(evt, ctx, callback))
  .catch(err => console.log(err))
}
© www.soinside.com 2019 - 2024. All rights reserved.