I'm using the http-proxy-middleware (https://github.com/chimurai/http-proxy-middleware#http-proxy-events) to implement a simple proxy (call it my-proxy/
) to another REST API (call it /rest-api
) that requires the user to pass an auth token in the HTTP header auth-token
. The token can be fetched from an endpoint POST /rest-api/auth
with the credentials in the body.
I want my proxy to take incoming requests and check if auth-token
is set in the the request header, and if not perform a POST /rest-api/auth
to retrieve the token and set auth-token
in the header before passing the request to rest-api/
.
In the proxy config I specify
onProxyReq: function (proxyReq, req, res) {
if (!req.header("auth-token")) {
const authRequest = request({
url: 'rest-api/auth',
method: 'POST',
json: {"username": "user", "password": "pass"}
},
function (error, resp, body) {
proxyReq.setHeader("auth-token", body.token)
}
);
}
}
I can see the body.token
return the right token. However the setHeader
call fails with Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
.
I think this means the request I modify has already been sent to rest-api/
before waiting for the callback, but I don't know how this is best solved in my scenario.
Any help?