CodeGenieApp / CodeGenieApp/serverless-express

Unable to Stream Responses from AWS Lambda

Abierto
#655 8 comentarios 6 reacciones 0 asignados Ver en GitHub
Lenguaje dominante
JavaScript
Estrellas
5.3k
Forks
676
Métricas de merge de PR
Sin PR fusionados en 30 d

Descripción

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

Guía de contribución

Abrir la guía de contribución

Línea de trabajo

Comience con la ruta `/stream` y el handler de producción `awsServerlessExpress({ app })` mostrado en el informe; después, inspeccione la compatibilidad de este repositorio con Lambda y el streaming. Reproduzca la respuesta retrasada de diez líneas y compare la ruta local de Express con la ruta de Lambda. Se considerará terminado cuando haya una corrección confirmada o una explicación clara, respaldada por el repositorio, de si el streaming puede funcionar, con cobertura de tests o documentación.

Escrito por el modelo de indexación a partir del texto del issue.

Evaluación

Stack tecnológico
aws, express, javascript, node.js
Área
api, backend, cloud
Tipo de issue
Error
Dificultad
5/5
Tiempo estimado
Más de una semana
Estado de actividad
Estancado
Claridad
Necesita aclaración
Aptitud para principiantes
25/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.