Невозможно обслуживать статические файлы с экспресс-маршрутизацией и без косой черты

Мне нужен маршрут под названием "main", который будет обслуживать статические файлы:

app.use('/main',express.static(__dirname+'/public'));

Однако, когда я делаю:

http://my.site.dev/main

Файлы CSS и JS не будут загружаться, потому что они пытаются получить их из

http://my.site.dev/css/styles.css

Он должен получать файлы из:

http://my.site.dev/main/css/styles.css

Однако, если я получаю доступ к моему сайту с завершающим косой чертой:

http://my.site.dev/main/

Все файлы проходят через мелкие

Любые идеи, почему не иметь завершающего косая черта, задерживают такие ресурсы, как CSS и JS?

Ответ 1

Это проблема с http, а не только проблема, связанная с Express. Проблема обсуждается в:

Если ваш URL-адрес/основной и ваш относительный URL-адрес - css/style.css, он будет разрешен /css/style.css; но если ваш URL-адрес/основной/, относительный URL-адрес разрешает /main/css/style.css.

Моя стратегия для решения этой проблемы заключается в перенаправлении для добавления конечной косой черты. Как это в Express:

app.all(/^\/main$/, function(req, res) { res.redirect('/main/'); });
app.use('/main/',express.static(__dirname+'/public'));

Или:

app.enable('strict routing');
app.all('/main', function(req, res) { res.redirect('/main/'); });
app.use('/main/',express.static(__dirname+'/public'));

Ответ 2

Как файлы JS/CSS запрашиваются в HTML? Если вы используете строки типа css/styles.css, то он попытается получить их из текущего каталога. Каталогом для /main является / (точно так же, как /main.html), а для /main/ - /main/. Быстрое исправление заключалось бы в использовании /main/css/styles.css в вашем HTML.