http-proxy-middleware:返回自定义错误而不是代理请求

时间:2018-03-14 10:18:31

标签: node.js http-proxy-middleware

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并不那么明显(或者至少我没有找到方法......)。

欢迎任何关于此的帮助/反馈!

2 个答案:

答案 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);
});