Я создал приложение 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
, описанной выше, тогда маршрутизация работает снова, и я отправляюсь на страницу входа в систему, но доступ к страницам CRA прерывается, потому что файлы сборки NOT FOUND
.
// access to React App build files - if removed, routing works again
app.use(express.static(__dirname + '/public/react_ui/build'));
У кого-нибудь есть предложения относительно того, почему это происходит?Я не знаю, является ли это проблемой приложения реакции, экспресс-проблемой или чем-то еще.Любые идеи будут полезны.