http-proxy-middleware Nodejs模块使用option.router参数中的函数提供了一种重新定位请求的方法。如上所述here:
router: function(req) {
return 'http://localhost:8004';
}
我需要实现一个检查请求中某些方面的过程(标题,URL ......所有信息都在函数接收的req
对象中)并在某些方面返回404错误案件。像这样:
router: function(req) {
if (checkRequest(req)) {
return 'http://localhost:8004';
}
else {
// Don't proxy and return a 404 to the client
}
}
但是,我不知道如何解决// Don't proxy and return a 404 to the client
。期待http-proxy-middleware并不那么明显(或者至少我没有找到方法......)。
欢迎任何关于此的帮助/反馈!
答案 0 :(得分:1)
您可以在onProxyReq
中执行此操作,而不是抛出并捕获错误:
app.use('/proxy/:service/', proxy({
...
onProxyReq: (proxyReq, req, res) => {
if (checkRequest(req)) {
// Happy path
...
return target;
} else {
res.status(404).send();
}
}
}));
答案 1 :(得分:0)
最后,我已经解决了投掷和预测以及使用默认的Express错误处理程序(我在问题帖子中没有提到,但是代理存在于基于Express的应用程序中)。
这样的事情:
app.use('/proxy/:service/', proxy({
...
router: function(req) {
if (checkRequest(req)) {
// Happy path
...
return target;
}
else {
throw 'awfull error';
}
}
}));
...
// Handler for global and uncaugth errors
app.use(function (err, req, res, next) {
if (err === 'awful error') {
res.status(404).send();
}
else {
res.status(500).send();
}
next(err);
});