Node.js 通过添加从另一个请求返回的身份验证令牌来修改http代理请求

Node.js 通过添加从另一个请求返回的身份验证令牌来修改http代理请求,node.js,proxy,request,auth-token,http-proxy-middleware,Node.js,Proxy,Request,Auth Token,Http Proxy Middleware,我正在使用http代理中间件()实现一个简单的代理(称之为myproxy/)到另一个RESTAPI(称之为/restapi),该RESTAPI要求用户在http头auth-token中传递一个auth-token。令牌可以从端点POST/restapi/auth获取,其凭证位于主体中 我希望我的代理接收传入的请求,并检查请求头中是否设置了auth-token,如果没有,则执行POST/rest-api/auth以检索令牌并在将请求传递给rest-api/之前在头中设置auth-token 在代理

我正在使用http代理中间件()实现一个简单的代理(称之为
myproxy/
)到另一个RESTAPI(称之为
/restapi
),该RESTAPI要求用户在http头
auth-token
中传递一个auth-token。令牌可以从端点
POST/restapi/auth
获取,其凭证位于主体中

我希望我的代理接收传入的请求,并检查请求头中是否设置了
auth-token
,如果没有,则执行
POST/rest-api/auth
以检索令牌并在将请求传递给
rest-api/
之前在头中设置
auth-token

在代理配置中,我指定

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)
                }
            );
        }
    }
我可以看到
主体。令牌
返回正确的令牌。但是,
setHeader
调用失败,出现
错误[ERR\u HTTP\u HEADERS\u SENT]:将头发送到客户端后无法设置头

我想这意味着我修改的请求在等待回调之前已经发送到
restapi/
,但我不知道在我的场景中如何最好地解决这个问题


有什么帮助吗?

我今天遇到了同样的问题。我通过使用一个单独的中间件(在http代理之前)来解决这个问题

伪码

//在单独的中间件中修复令牌内容
应用程序使用('/api',异步(req、res、next)=>{
if(!req.session.token){
const resToken=wait axios.post(令牌、url、数据、选项)
req.session.token=resToken.data
}
下一个()
}
//代理中间件选项
常量代理选项={
目标:config.gateway.url,//目标主机
来源:对,
路径重写:函数(路径,请求){
返回路径.replace('/api','')
},
onProxyReq:函数onProxyReq(proxyReq,req,res){
//将自定义头添加到请求
let token=req.session.token
如果(令牌){
proxyReq.setHeader('Authorization','bearer${token.access_token}`)
}
},
日志级别:“调试”,
}
应用程序使用(代理('/api',代理选项))

希望这能有所帮助!

忘记发布我的解决方案,但我最终还是做了同样的事情,只是在中间件内部调用了代理,所以我只注册了中间件,我认为这是更好的封装。