Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -315,6 +315,7 @@ Almost all middlewares that are compatible with Express are compatible with µEx
- ✅ [helmet](https://www.npmjs.com/package/helmet)
- ✅ [passport](https://www.npmjs.com/package/passport)
- ✅ [morgan](https://www.npmjs.com/package/morgan)
- ✅ [pino-http](https://www.npmjs.com/package/pino-http)
- ✅ [swagger-ui-express](https://www.npmjs.com/package/swagger-ui-express)
- ✅ [graphql-http](https://www.npmjs.com/package/graphql-http)
- ✅ [better-sse](https://www.npmjs.com/package/better-sse)
Expand Down
169 changes: 167 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,7 @@
"pako": "^2.1.0",
"passport": "^0.7.0",
"passport-local": "^1.0.0",
"pino-http": "^11.0.0",
"pkg-pr-new": "^0.0.75",
"pug": "^3.0.4",
"response-time": "^2.3.4",
Expand Down
4 changes: 4 additions & 0 deletions src/response.js
Original file line number Diff line number Diff line change
Expand Up @@ -864,4 +864,8 @@ module.exports = class Response extends Writable {
get writableFinished() {
return this.finished;
}

get writableEnded() {
return this.finished;
}
}
7 changes: 3 additions & 4 deletions tests/tests/res/res-connection.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,11 @@ const app = express();
app.get('/test', (req, res) => {
console.log(res.writableFinished);
console.log(res.connection.writable);
// res.socket and res.writableFinished right after end() are not printed:
// node moved when the socket is detached, so express drifts between minors
res.end('bye', () => {
// console.log(res.writable); // express 🐛 true forever...
console.log(res.socket); // should be null after end(). https://nodejs.org/api/http.html#responsesocket
console.log('end callback');
});
console.log(res.writableFinished);
// console.log(res.connection.writable); on express is true; on ultimate is false
});

app.get('/test2', (req, res) => {
Expand Down
32 changes: 32 additions & 0 deletions tests/tests/res/res-pino-http.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
// must be seen as completed by pino-http, not aborted

const express = require("express");
const pinoHttp = require("pino-http");

const app = express();

const lines = [];
app.use(pinoHttp({
// drop pid, hostname and time, so the two runs print the same
base: null,
timestamp: false
}, {
write: line => {
const log = JSON.parse(line);
lines.push(`${log.msg} ${log.res.statusCode}`);
}
}));

app.get('/test', (req, res) => {
res.end('bye');
});

app.listen(13335, async () => {
const response = await fetch('http://localhost:13335/test');
console.log(await response.text());

setTimeout(() => {
console.log(lines.join('\n'));
process.exit(0);
}, 100);
});
19 changes: 19 additions & 0 deletions tests/tests/res/res-writable-ended.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
// must set res.writableEnded after end(), like a node Writable

const express = require("express");

const app = express();

app.get('/test', (req, res) => {
console.log('before', res.writableEnded);
res.end('bye');
console.log('after', res.writableEnded);
console.log('aborted', req.readableAborted);
});

app.listen(13334, async () => {
const response = await fetch('http://localhost:13334/test');
console.log(await response.text());

process.exit(0);
});
Loading