Я создал сервер NodeJS с интерфейсом React.
Вот полный код маршрута, который я использую для перенаправления любого localhost:888/posts/23
в index.html, чтобы позволить моему внешнему интерфейсу обрабатывать представление.
/**
* Routes
*/
//API route
const apiRoute = require('./routes/api');
app.use('/api', apiRoute);
//Front-end route
if (process.env.NODE_ENV === 'production') {
app.use(express.static(path.join(__dirname, 'client/build')));
app.get('/*', function(req, res) {
res.sendFile(path.join(__dirname, 'client/build', 'index.html'));
});
} else {
app.use(express.static(path.join(__dirname, 'client/public')));
app.get('/*', function(req, res) {
res.sendFile(path.join(__dirname, 'client/public', 'index.html'));
});
}
//404 routes
app.use((req, res, next) => {
httpLog(`404 NOT FOUND path: ${req.path}`);
res.status(404).end();
});
Это работает. Но он возвращает index.html в КАЖДЫЙ запрошенный файл, который не существует. В приложении без реакции я удалил styles.css и открыл домашнюю страницу в Chrome, он служит index.html как styles.css:
Есть ли хороший способперенаправлять только пути вроде 'localhost: 888 / posts / 1', а не что-либо, что указывает на настоящий файл? (Может быть, запросы с расширениями хотя бы)
Или не считается плохой практикой отправлять 200 OK с HTML на любой запрос, который не перехватывается ни на одном маршруте?
Также еще одна «ошибка», которую яобнаружилось, что когда я вызываю localhost / gfawfwa / awfaw, я захожу в маршрут app.get и обслуживаю HTML. После этого <link href="style.css" />
не работает, поскольку веб-сайт запрашивает /gfawfwa/awfaw/style.css и его не существует. Это сработает, если я использую «/style.css» вместо «style.css», но я не уверен, что он предназначен для использования только абсолютных путей в настройке nodeJS.