如何解决如何在http-proxy-middleware函数内的NodeJS中发出终止请求?
我有一个代理服务器,可以在将特定类型的POST请求转发到服务器之前对其进行修改。
修改要求我向另一台服务器发出请求,以便获得新值,该新值将代替POST请求中的旧值。
在获得新值之前,我无法阻止http-proxy-middleware
的{{1}}函数。
任何事情都会有所帮助。谢谢。
代码:
onProxyReq
问题是在可以从const options = {
target: 'http://localhost:8998',changeOrigin: true,onProxyReq: (proxyReq,req,res) => {
if (req.path === '/batches' && req.body && req.body.file) {
request.post('MAKES REQUEST TO ANOTHER SERVER FOR NEW VALUE',{json: {}},(error,res,body)=>{
req.body.url=body.url;
});
const bodyData = JSON.stringify(req.body);
proxyReq.setHeader('Content-Type','application/json');
proxyReq.setHeader('Content-Length',Buffer.byteLength(bodyData));
proxyReq.write(bodyData);
}else{
const bodyData = JSON.stringify(req.body);
proxyReq.setHeader('Content-Type',Buffer.byteLength(bodyData));
proxyReq.write(bodyData);
}
},};
app.use(createProxyMiddleware(options));
操作接收新值之前转发POST请求。
解决方法
我认为可以通过在代理中间件之前使用其他中间件来解决。在这个附加的中间件处理程序中,您可以检查是否发出外部请求,并将新的url
分配给req.body
。然后,在onProxyReq
中,您只需检查req.body是否已更改,然后重新计算内容长度。类似的东西(请注意,我不赞成使用request作为超级代理):
const superagent = require('superagent');
app.use('/batches',async (req,res,next) => {
if(req.body && req.body.file) {
const resp = await superagent('http://your-other-host');
req.body.url = resp.body.url;
}
next();
});
app.use(createProxyMiddleware(options));
然后在您的代理配置中可以执行以下操作:
const options = {
target: 'http://localhost:8998',changeOrigin: true,onProxyReq: (proxyReq,req,res) => {
if (req.path === '/batches' && req.body && req.body.file) {
const bodyData = JSON.stringify(req.body);
proxyReq.setHeader('Content-Type','application/json');
proxyReq.setHeader('Content-Length',Buffer.byteLength(bodyData));
proxyReq.write(bodyData);
}
},};
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。