http-proxy-middleware: return 自定义错误而不是代理请求
http-proxy-middleware: return custom error instead of proxying the request
http-proxy-middleware Nodejs module provides a way of re-target request using a function in the option.router parameter. As described here:
router: function(req) {
return 'http://localhost:8004';
}
我需要实施一个流程来检查请求中的某些方面(headers、URL...所有这些信息都在 req
object 中函数接收)和 return 在某些情况下出现 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 不是很明显(或者至少我还没有找到方法...)。
欢迎任何 help/feedback 的讨论!
最后我解决了 throwing 和 expectation 并使用默认的 Express 错误处理程序(我没有在问题 post 中提到,但代理存在于 Express-based 应用程序中)。
像这样:
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);
});
您可以在 onProxyReq
中执行此操作,而不是抛出并捕获错误:
app.use('/proxy/:service/', proxy({
...
onProxyReq: (proxyReq, req, res) => {
if (checkRequest(req)) {
// Happy path
...
return target;
} else {
res.status(404).send();
}
}
}));
http-proxy-middleware Nodejs module provides a way of re-target request using a function in the option.router parameter. As described here:
router: function(req) {
return 'http://localhost:8004';
}
我需要实施一个流程来检查请求中的某些方面(headers、URL...所有这些信息都在 req
object 中函数接收)和 return 在某些情况下出现 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 不是很明显(或者至少我还没有找到方法...)。
欢迎任何 help/feedback 的讨论!
最后我解决了 throwing 和 expectation 并使用默认的 Express 错误处理程序(我没有在问题 post 中提到,但代理存在于 Express-based 应用程序中)。
像这样:
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);
});
您可以在 onProxyReq
中执行此操作,而不是抛出并捕获错误:
app.use('/proxy/:service/', proxy({
...
onProxyReq: (proxyReq, req, res) => {
if (checkRequest(req)) {
// Happy path
...
return target;
} else {
res.status(404).send();
}
}
}));