Comments (5)
@metaskills happy to receive PRs for this. Express does support streaming response https://stackoverflow.com/a/38789462/436540
from serverless-express.
So I found a temporary workaround: just grab the entire payload from serverlessExpress
, wrap it in a stream and send it out via the streaming API. This gives the ability to send bigger payloads out of the lambda but obviously it somewhat defeats the purpose of streaming when the entire response is buffered first. So make sure to give enough memory to the lambda to store these buffers.
const pipeline = require('util').promisify(require('stream').pipeline);
const { Readable } = require('stream');
let serverlessExpressInstance;
const getServerlessExpress = async () => {
if (!serverlessExpressInstance) {
serverlessExpressInstance = serverlessExpress({
app,
resolutionMode: 'PROMISE',
});
}
return serverlessExpressInstance;
}
// @ts-ignore: https://github.com/aws/aws-lambda-nodejs-runtime-interface-client/issues/74
exports.handler = awslambda.streamifyResponse(async (event, responseStream, context) => {
const serverlessHandler = await getServerlessExpress();
const result = await serverlessHandler(event, context, () => { });
const metadata = {
statusCode: result.statusCode,
headers: result.headers,
cookies: result.cookies,
};
let payload;
if (result.body) {
payload = Buffer.from(result.body, result.isBase64Encoded ? 'base64' : 'utf8');
} else {
payload = Buffer.alloc(0);
}
// Assign to the responseStream parameter to prevent accidental reuse of the non-wrapped stream.
// @ts-ignore: https://github.com/aws/aws-lambda-nodejs-runtime-interface-client/issues/74
responseStream = awslambda.HttpResponseStream.from(responseStream, metadata);
await pipeline(
Readable.from(payload),
responseStream,
);
});
I have also encountered some issues when there is no payload to send, only headers. So if your expressjs
server returns status code only without any response body, you might encounter a dangling connection. This might be a bug in AWS infrastructure. More info aws/aws-lambda-nodejs-runtime-interface-client#95
from serverless-express.
For those curious on streaming support. https://aaronstuyvenberg.com/posts/introducing-response-streaming
Is anyone looking into this for express? I kind of assumed given the popularity this was done already. Totally willing to help if Express itself allows this?
from serverless-express.
Maybe related.
from serverless-express.
Hello, Anyone find a solution to stream content?
from serverless-express.
Related Issues (20)
- Logger doesn't work HOT 3
- [404 Not Found] API Gateway HTTP Protocol Path Matching with stage HOT 3
- `body` data not passed correctly to the express app HOT 1
- Is there support for NodeJS Server from HTTP module HOT 1
- Pradeep wants to pay 0 USD to have this issue fixed
- NestJS & Unable to determine event source based on event HOT 5
- RIE instructions missing
- Incompatibility with AWS API Gateway HOT 8
- Binary Content Type with Dots or Other Regex
- @codegenie/serverless-express has not been release to npm HOT 2
- NestJS + PG Aurora Serverless cold start HOT 4
- Serverless with Node14 & Yarn unable to install @vendia/serverless-express via serverless package/deploy. Pulls latest @CodeGenieApp tag instead HOT 2
- "postbuild" commnad can't work in Windows HOT 3
- `Authorization` headers not passed properly through Api Gateway v1.
- Swagger for basic-starter nestjs template
- Failing works with files
- Support hyper-express HOT 2
- Potential Issue with getCurrentInvoke handling concurrent Lambda invocations HOT 1
- Handling custom EventBridge events HOT 4
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from serverless-express.