【发布时间】:2021-01-15 12:28:34
【问题描述】:
我有一个简单的 Express 应用,托管在 AWS 上,使用无服务器框架。
我使用 serverless-http 包装 express 应用程序以部署到 AWS lambda 函数,并使用 express-async-await 允许对路由使用异步函数。
对于我的一条路线,我想向用户返回一个页面,然后继续执行各种异步任务。这是我的代码的缩写版本:
const serverless = require("serverless-http");
const express = require("express");
const mustacheExpress = require("mustache-express");
const aa = require("express-async-await");
// configure our express app
const app = aa(express());
app.use(express.static("static"));
app.engine("html", mustacheExpress());
app.set("view engine", "html");
app.set("views", __dirname + "/views");
app.get("/", async (request, response) => {
response.render("generating", { });
// various async tasks
await s3.putObject({ });
await s3.putObject({ });
});
module.exports.handler = serverless(app);
但是,通过检查日志,我可以看到response.render 之后的任务在中途停止。 lambda 没有错误地返回,没有超时,但任务已停止。
将response.render 移动到路由的末尾意味着异步任务被执行,但是,用户看到的是一个微调器而不是呈现的 HTML 保存页面。
通过阅读,我发现许多参考资料表明 Express 非常乐意在返回响应后继续执行。
任何想法我的情况出了什么问题?
【问题讨论】:
标签: express serverless-framework