node-run-middleware icon indicating copy to clipboard operation
node-run-middleware copied to clipboard

Lack of working res.getHeaders() breaks res.json() and some middleware. Possible fix suggestion.

Open dustinbolton opened this issue 1 year ago • 1 comments

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; 
  };

dustinbolton avatar Nov 20 '23 20:11 dustinbolton

@Aminadav Do you think this PR looks okay? Thanks!

dustinbolton avatar Nov 27 '23 15:11 dustinbolton