如何使用带有嵌套逻辑的createProxyMiddleware [英] How do I use createProxyMiddleware with the nested logic

查看:930
本文介绍了如何使用带有嵌套逻辑的createProxyMiddleware的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

/node_modules/http-proxy/lib/http-proxy/index.js:120;错误:套接字挂起

/node_modules/http-proxy/lib/http-proxy/index.js:120; Error: socket hang up

上一篇文章: /node_modules/http-proxy/lib/http-proxy/index.js:120;错误:套接字挂起

我正在尝试使用createProxyMiddleware({ target: serviceProvider})而不是 apiProxy.web(req, res, {target: serviceProvider});.浏览器挂起,但没有显示任何内容(尽管我在选项卡中看到了旋转)

I'm trying to use createProxyMiddleware({ target: serviceProvider}) instead of apiProxy.web(req, res, {target: serviceProvider});. The browser hangs and doesn't show anything (I see the spin in the tab though)

如何通过嵌套代码库正确使用createProxyMiddleware,如下所示?

How do I properly use createProxyMiddleware with the nested codebase like below?

这是源代码.

app.get('/source*',
    function(req, res, next) {
        req.query.RelayState = req.url;
        if(req.user) { // if user is authenticated,
            if(req.originalUrl) {
                resource_path = req.originalUrl.split('/source')[1];
                console.log(req.user['email'] + ' is viewing ' + req.originalUrl);
            }
            createProxyMiddleware({ target: serviceProvider})
            // apiProxy.web(req, res, {target: serviceProvider});
        } else {
            if(process.env.MODE=='HACK') {
              createProxyMiddleware({ target: serviceProvider})
              // apiProxy.web(req, res, {target: serviceProvider});
            } else {
              passport.authenticate('samlStrategy')(req, res, next);
            }
        }
    },
);

在这之间,它起作用:app.get('/source*', createProxyMiddleware({ target: serviceProvider}))

Between, this works: app.get('/source*', createProxyMiddleware({ target: serviceProvider}))

推荐答案

问题是创建了代理中间件,但并未实际调用该代理中间件,结果请求被挂起.解决此问题的一种方法是像您一样创建中间件(但最好在路由处理程序之外,因为它将在每个请求上创建),然后使用当前明确的中间件的参数进行调用:

The problem is that the proxy middleware is created but not actually called and as a result the request hangs. One way to solve this is to create the middleware as you did (but preferably outside the route handler, as it would get created on each request), and then call it with the current express middleware's arguments:

const serviceProviderProxy = createProxyMiddleware({target: serviceProvider }); 

    app.get('/source*', (req, res, next) => {
        req.query.RelayState = req.url;
        if (req.user) { // if user is authenticated,
            if (req.originalUrl) {
                resource_path = req.originalUrl.split('/source')[1];
                console.log(req.user['email'] + ' is viewing ' + req.originalUrl);
            }
            return serviceProviderProxy.call(serviceProviderProxy, req, res, next); // you need to return here if there's more code below the else block, otherwise return is not needed
        } else {
            if(process.env.MODE=='HACK') {
               return serviceProviderProxy.call(serviceProviderProxy, req, res, next);              
            } else {
               passport.authenticate('samlStrategy')(req, res, next);
            }
        }
        // potential more code ... 
    });

这篇关于如何使用带有嵌套逻辑的createProxyMiddleware的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆