嵌入在快速应用中的CRA中断了快速路由

时间:2019-03-22 03:12:29

标签: express routing create-react-app

我已经创建了一个CRA应用程序,并有两条快速路线来加载CRA构建文件,例如:

app.get('/files', async (req, res, next) => {
        ...
        try {
            res.format({
                html: function() {
                    const fileLoc = './public/react_ui/build/index.html';
                    const stream = fs.createReadStream(path.resolve(fileLoc));
                    stream.pipe(res);
                }
            });
        } catch (e) {
            next(e);
            res.redirect(SEE_OTHER.http_status, '/login');
        }
    });

在添加CRA之前,Express应用程序公开了/public文件夹,如下所示:

// access to express App code files
app.use(express.static(__dirname + '/public'));

现在我已经嵌入了CRA应用程序,我想公开这样的构建文件,否则通过构建index.html创建的CRA文件不知道/static/js/*的位置:

// access to React App build files
app.use(express.static(__dirname + '/public/react_ui/build'));

但是,它会中断快速路由。例如,当我注销该应用程序时,它应该将我发送到端点/,这将检查我是否登录,如果没有登录,那么它应该将我发送到登录页面,例如这个:

app.get('/', function(req, res) {
...
    isLoggedIn(req, function(status) {
        switch (status.status) {
            case 200:
                res.redirect(303, '/loader');
                break;
            default:
                res.redirect(303, '/login');
        }
    });

});

但是,这就是中断。如果删除命令以暴露上面的/build文件夹,则路由将再次起作用,并且将我发送到登录页面,但是由于构建文件为NOT FOUND,因此访问CRA页面时会中断。 >

// access to React App build files - if removed, routing works again
app.use(express.static(__dirname + '/public/react_ui/build'));

有人为什么会这样吗?我不知道这是应用程序问题,快递问题还是其他问题。任何见解都会有所帮助。

1 个答案:

答案 0 :(得分:1)

您的路线有冲突。

app.js

app.use('/', express.static(__dirname + 'path/to/static/build'));

// Dont use '/' as it used for static route.
app.use('/auth', (req, res) => {
  ...
  isLoggedIn(req, function(status) {
        switch (status.status) {
            case 200:
                res.redirect(303, '/loader');
                break;
            default:
                res.redirect(303, '/login');
        }
    });
})

请注意,您可以使用任何路由进行静态构建。我已经给出了常规。