Express, как всегда обслуживать каталог c? - PullRequest
0 голосов
/ 08 апреля 2020

Так что мне нужно Express, чтобы всегда обслуживать каталог c. Это множество руководств о том, как просто обслуживать индекс. html, например здесь . Они используют этот код:

app.use(express.static(path.join(__dirname, 'build')));

app.get('/*', function (req, res) {
    res.sendFile(path.join(__dirname, 'build', 'index.html'));
});

Однако проблема для меня заключается в том, что маршрут '/ *' служит только для индекса. html, а не для каких-либо файлов, которые он загружает, например, main. js. Мне в основном нужно, чтобы мое приложение всегда обслуживало build /, независимо от того, по какому пути находится посетитель, поскольку маршрутизация обрабатывается внешним интерфейсом с помощью React Router. Так, например:

app.get('/*', function (req, res) {
    res.redirect('/');
});

Не работает, потому что удаляет путь. Пользователю, приземляющемуся на '/ aa / bb / cc', должен быть предоставлен тот же контент (express .stati c), что и пользователю на '/'. Я пробовал app.use('/*', express.static(...), однако это приводит к SyntaxError: expected expression, got '<' в браузере, потому что, похоже, каждый запрос направляется в файл stati c index. html file?

Ответы [ 2 ]

0 голосов
/ 08 апреля 2020

Чтобы ответить на мой собственный вопрос, я нашел ответ: { ссылка }

Чтобы все файлы использовали абсолютные пути (например, src = "/ main. js") I должен был установить output.publicPath в '/' в моей конфигурации веб-интерфейса. Это свойство используется html -webpack-plugin. См. Этот вопрос для получения более подробной информации: HtmlWebpackPlugin внедряет файлы относительных путей, которые прерываются при загрузке не-1011 * путей веб-сайтов

0 голосов
/ 08 апреля 2020

Не помещайте это в app.get, сделайте это в главном приложении. js файл как app.use в документации Express: https://expressjs.com/en/starter/static-files.html

...