Как вернуть 404, продолжая перенаправлять URL-адреса React-Router на index.html на сервере Express? - PullRequest
0 голосов
/ 08 октября 2019

Я создал сервер 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: Chrome screenshot

Есть ли хороший способперенаправлять только пути вроде '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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...