node-run-middleware
node-run-middleware copied to clipboard
Lack of working res.getHeaders() breaks res.json() and some middleware. Possible fix suggestion.
When trying to use PassPort sessions middleware app.runMiddleware() results in failure due to problems with getting headers. A similar problem was encountered in Issue https://github.com/Aminadav/node-run-middleware/issues/39 with a partial workaround.
Error seen:
node:_http_outgoing:721
const entry = headers[StringPrototypeToLowerCase(name)];
^
TypeError: Cannot read properties of undefined (reading 'set-cookie')
at ServerResponse.getHeader (node:_http_outgoing:721:24)
at setcookie (/node_modules/express-session/index.js:661:18)
at ServerResponse.<anonymous> (/node_modules/express-session/index.js:243:7)
at ServerResponse.writeHead (/node_modules/on-headers/index.js:35:16)
at ServerResponse._implicitHeader (node:_http_server:338:8)
at writetop (/node_modules/express-session/index.js:276:15)
at ServerResponse.end (/node_modules/express-session/index.js:343:16)
at allFailed (/node_modules/passport/lib/middleware/authenticate.js:177:11)
at attempt (/node_modules/passport/lib/middleware/authenticate.js:183:28)
at strategy.fail (/node_modules/passport/lib/middleware/authenticate.js:305:9)
References for above error:
- https://github.com/nodejs/node/blob/a9a477812edb39e00590cffd04f1c10dc7e3e60a/lib/_http_outgoing.js#L769
- https://github.com/nodejs/node/blob/main/lib/_http_outgoing.js
Adding the following into createRes() seems to fix the issue while restoring the ability for res.getHeader() to work.
Proposed Solution (submitted in PR https://github.com/Aminadav/node-run-middleware/pull/57):
res.getHeader = function(name) {
if ( 'undefined' !== typeof headers[name] ) {
return headers[name];
}
return null;
};
@Aminadav Do you think this PR looks okay? Thanks!