【发布时间】:2020-06-29 23:01:46
【问题描述】:
谁能阐明我在 github 上的 aws-serverless-express 存储库中打开的问题? https://github.com/awslabs/aws-serverless-express/issues/276
我正在尝试使用 aws-serverless-express 包运行我以前的 express.js 服务器。当我在没有任何特殊选项的情况下运行时,我解决了,但链中的承诺永远不会得到尊重,这意味着我不会在事件循环中执行所有事情。
如果我使用“PROMISE”标志运行 serverlessexpress,我会执行我的所有承诺,但程序永远不会解析并在设置的最长时间后超时。
我什至按照该仓库中的示例启动了一个新项目,结果相同。
解决但不遵守我的承诺时我的主要执行文件(index.js)
const awsServerlessExpress = require('aws-serverless-express')
const app = require('./app.js')
const server = awsServerlessExpress.createServer(app, null)
exports.handler = (event, context) => {
return awsServerlessExpress.proxy(server, event, context)
}
我的主要执行文件 (index.js) 未解决,但尊重我的承诺
const awsServerlessExpress = require('aws-serverless-express')
const app = require('./app.js')
const server = awsServerlessExpress.createServer(app, null)
exports.handler = (event, context) => {
return awsServerlessExpress.proxy(server, event, context, 'PROMISE')
}
我也试过这个:
const awsServerlessExpress = require('aws-serverless-express')
const app = require('./app.js')
const server = awsServerlessExpress.createServer(app, null)
exports.handler = (event, context) => {
return awsServerlessExpress.proxy(server, event, context, 'PROMISE').promise
}
我的快递服务器文件(app.js)
const express = require('express')
const bodyParser = require('body-parser')
const awsServerlessExpressMiddleware = require('aws-serverless-express/middleware')
const app = express()
const router = express.Router()
router.use(bodyParser.json())
router.use(bodyParser.urlencoded({ extended: true }))
router.use(awsServerlessExpressMiddleware.eventContext())
router.get('/', (req, res) => {
res.render('index', {
apiUrl: req.apiGateway ? `https://${req.apiGateway.event.headers.Host}/${req.apiGateway.event.requestContext.stage}` : 'http://localhost:3000'
})
})
router.get('/users', (req, res) => {
res.json(users)
})
const users = [{
id: 1,
name: 'Joe'
}, {
id: 2,
name: 'Jane'
}]
function myFunc () {
console.log('hey')
}
setTimeout(myFunc, 3000)
app.use('/', router)
module.exports = app
【问题讨论】:
-
This Github issue comment 会建议它是
awsServerlessExpress.proxy(server, event, context, 'PROMISE').promise而不是awsServerlessExpress.proxy(server, event, context, 'PROMISE')这可能会起作用。线程中的下一条评论还提出了另一种解决方案 - 我希望它有所帮助。 -
@cubrr 我也试过了,结果一样。
标签: node.js amazon-web-services express promise aws-lambda