CodeGenieApp / CodeGenieApp/serverless-express
Unable to Stream Responses from AWS Lambda
- 主要言語
- JavaScript
- スター
- 5.3k
- フォーク
- 676
- PR マージ指標
- 30日以内にマージされた PR はありません
説明
I am facing difficulties in streaming responses from AWS Lambda. Initially, I attempted to use the serverless-http package for this purpose, but I learned that it doesn't support streaming. Subsequently, I switched to the @vendia/serverless-express package, hoping it would resolve the issue. However, even with this package, I can still not achieve streaming functionality.
My code:
```
const serverless = require("serverless-http"),
express = require("express"),
morgan = require("morgan"),
helmet = require("helmet"),
bodyParser = require("body-parser"),
awsServerlessExpress = require("@vendia/serverless-express");
const cors = require("cors");
const rootPrefix = ".",
coreConstants = require(rootPrefix + "/config/coreConstants"),
apiRoutes = require(rootPrefix + "/routes/index"),
setResponseHeader = require(rootPrefix + "/middlewares/setResponseHeader");
// Set worker process title.
process.title = "";
const app = express();
// Use Morgan middleware to log requests
app.use(morgan("combined"));
// Enable CORS
app.use(cors());
// Helmet can help protect the app from some well-known web vulnerabilities by setting HTTP headers appropriately.
app.use(helmet());
// Node.js body parsing middleware. Default limit is 100kb
app.use(bodyParser.json({ limit: "2mb" }));
// Parsing the URL-encoded data with the qs library (extended: true). Default limit is 100kb
app.use(bodyParser.urlencoded({ extended: true, limit: "2mb" }));
app.get("/stream", async (req, res) => {
res.setHeader("Content-Type", "text/plain");
for (let i = 0; i < 10; i++) {
res.write(`Line ${i}\n`);
await new Promise((resolve) => setTimeout(resolve, 1000));
}
res.end();
});
// Set response header to prevent response caching
app.use(setResponseHeader());
// If running in development mode, start the server on port 8080, else export handler for lambda
if (
coreConstants.ENVIRONMENT === "development" ||
coreConstants.ENVIRONMENT === "test"
) {
console.log("Server running on 8080");
app.listen(8080);
module.exports = { handler: app };
} else {
// Export the handler for Lambda on production
module.exports.handler = awsServerlessExpress({ app })
}
```
コントリビューションガイド
調査の方向性
レポートに示されている `/stream` ルートと本番用の `awsServerlessExpress({ app })` handler から始め、その後、この repository の Lambda および streaming のサポートを調査してください。10 行の遅延レスポンスを再現し、ローカルの Express パスと Lambda パスを比較してください。完了の条件は、修正が確認できること、または streaming が動作可能かどうかについて、テストカバレッジまたはドキュメントによって裏付けられた、repository に基づく明確な説明が得られることです。
索引モデルが issue の本文から書いたものです。
評価
- 技術スタック
- aws, express, javascript, node.js
- 領域
- api, backend, cloud
- issue の種類
- バグ
- 難易度
- 5/5
- 見積もり時間
- 1週間以上
- 活発さ
- 停滞
- 明瞭さ
- 説明が足りない
- 初心者へのやさしさ
- 25/100