从反应无法在快速根路由器上获取请求

时间:2018-06-28 03:15:54

标签: javascript node.js reactjs express openshift

我正在尝试以生产模式下的反应从fetch api调用快速根路由器('/'),但是它不起作用。

我正在使用公用服务器,因为我将React View用作静态文件并进行如下渲染:

if(process.env.NODE_ENV == 'production'){
    app.use(express.static(`${__dirname}/client/build`));
    app.get('*', (req, res) => {
        res.sendFile(path.join(__dirname+'/client/build/index.html'));
      });
    }

此外,我已经尝试使用生产主机名作为访存中的路由,但这对我不起作用,因为我正在使用代理。

完整的故事是我正在尝试从openshift oauth-proxy身份验证中获取一些令牌。有两个容器,一个用于代理,另一个用于我的Web应用程序。验证用户身份后,代理会将令牌发送到“ localhost:8080”(这是我的Web应用程序)。

我是这样处理的

app.get('/', function (req, res) {
    if (req.headers !== undefined && req.headers['x-forwarded-access-token'] !== undefined && req.headers['x-forwarded-user'] != undefined) {

        userDetails.accessToken = req.headers['x-forwarded-access-token'];
        userDetails.username = req.headers['x-forwarded-user'];

        req.session.token = userDetails.accessToken;
        req.session.username = userDetails.username;

        res.send({ accessToken: userDetails.accessToken, username: userDetails.username});
    }  
});

但是当我从react的api获取上述路由器时,我没有得到响应。该应用程序崩溃。

当我在开发环境上运行它时,我同时在不同的服务器上运行,并且当我完全编写它时,例如“ fetch('http://localhost:3001')” 然后就可以了。

我希望它也可以在生产中使用。有帮助吗?

更多详细信息

总体流程是,我已在openshift上部署了我的react应用。我正在使用oauth-proxy对用户进行身份验证,然后在代理将我的身份验证令牌发送给我后,便登录到我的react应用程序上。

proxy-app容器内有两个容器,proxy和web-app。当我转到Pod的路线时,它将带我进入密钥访问登录页面,在该页面中输入我的凭据,一旦通过身份验证,代理就会将标头中的auth-令牌发送到它的sidecar容器,该容器是我的Web应用程序(在localhost上运行) :在Pod内的:8080。)代理将标头发送到localhost:8080/(Web应用程序),它是Web应用程序的根目录。现在在这里,我必须从客户端向此路由发出获取请求并获取令牌(我无法这样做,因为它不能以这种方式工作,可能是因为我使用的代理运行在与我的Web不同的主机上应用)。但是当我在('/ api / xyz')等其他路线上发出请求时,它就像魅力一样工作。根路由和代理导致了问题。

1 个答案:

答案 0 :(得分:0)

当我在react代码中添加cors时,它起作用了。我在服务器代码中有它,但没有反应。

fetch('/auth', {
  credentials: 'include',
  mode: 'cors'
})