-
Notifications
You must be signed in to change notification settings - Fork 49
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
writeHead doesn't work as expected when passing headers as second parameter #10
Comments
After I fixed this issue locally, I stumbled upon another issue. The library I use, contains the following to calls: res.writeHead(302, null, {
'Access-Control-Allow-Origin': '*',
'Location': path
});
res.end(); But when looking at the implementation of function end(context, data, encoding) {
// 1. Write head
this.writeHead(this.statusCode); // Make jshttp/on-headers able to trigger
// 2. Return raw body to Azure Function runtime
context.res.body = convertToBody(data, encoding);
context.res.isRaw = true;
context.done();
}
|
@luchsamapparat thank you for your investigation on this. May I ask you what exactly is the library you are using? |
I'm using oauth-shim to build an OAuth proxy according to the documentation from hello.js. The implementation is pretty simple as you just have to configure Express.js to use oauth-shim: const express = require("express");
const createHandler = require("azure-function-express").createHandler;
const oauthshim = require('oauth-shim');
const param = require('oauth-shim/src/utils/param');
const app = express();
app.all('/api/oauth-btg', oauthshim);
// monkey patch for writeHead issue in azure-function-express
oauthshim.redirect = function (req, res, next) {
if (req.oauthshim && req.oauthshim.redirect) {
let hash = req.oauthshim.data;
let path = req.oauthshim.redirect;
path += (hash ? '#' + param(hash) : '');
// bugfix: always pass statusMessage as second param
res.writeHead(302, null, {
'Access-Control-Allow-Origin': '*',
'Location': path
});
res.statusCode = 302;
res.end();
}
else if (next) {
next();
}
};
oauthshim.init([{
client_id: 'XXX',
client_secret: 'XXX',
grant_url: 'https://login.microsoftonline.com/common/oauth2/v2.0/token',
domain: 'XXX'
}]);
module.exports = createHandler(app); |
maybe it's me but i cannot get this call to this._renderHeaders() here: https://github.com/yvele/azure-function-express/blob/master/src/OutgoingMessage.js#L67 where does _renderHeaders() come from ? (not in the azure-functions response object) |
fix: Allow headers to be passed as 2nd param to writeHead #10
@gunzip what version of Node.js are you using? Because it's only compatible with |
@yvele you were right, it depends on node version (it works against 6.x) |
Hey,
first of all: thanks for providing this library!
I ran into an issue with another library where
writeHead
is called like this:It took me some time to realize, that
azure-function-express
provides its own implementation of this method. It seems that there is a incompatibility, as the original one allows for the secondstatusMessage
to be omitted as you can see in the Node documentation:https://nodejs.org/api/http.html#http_response_writehead_statuscode_statusmessage_headers
The implementation provided by
azure-function-express
doesn't support this call signature:https://github.com/yvele/azure-function-express/blob/master/src/OutgoingMessage.js#L44
The text was updated successfully, but these errors were encountered: