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();
        }
    }
}));