2

我正在尝试使用serverless-http将 express 应用程序部署到 AWS lambda。但是我的应用程序需要调用一个init()函数,该函数会加载路由等,然后返回一个承诺。

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))

问题是 serverless-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))

但这也不起作用是有道理的。

4

2 回答 2

1

是的。正如 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))
}
于 2017-12-17T01:30:00.280 回答
0

简短的回答:“你不能”。但根据库的源代码,它不期望handler. 但是您可以进行异步调用,因为处理程序的源代码finish显示它向响应套接字添加了一个事件侦听器。

于 2017-12-16T18:01:01.660 回答