我试图使用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))
但这也不合适。
简短的回答:“你不能”。但基于图书馆的source code,它不期望handler
有任何回报价值。但是你可以进行异步调用,因为source code处理程序的finish
显示它向响应套接字添加了一个事件监听器。
是啊。正如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))
}