ExpressJS неправильно переписывает пути при навигации по каталогам - PullRequest
4 голосов
/ 04 октября 2011

Я столкнулся с безумно противоречивой проблемой с Express в приложении Node, из-за которой я не могу правильно перемещаться по встроенному рендерингу каталогов из-за перезаписи URL.Объяснить это проще с помощью кода:

var express = require('express');
var app = express.createServer();

app.use("/public", express.static("/web/content"));
app.use("/public", express.directory("/web/content"));

app.listen(8888);

При использовании сервера Uber-Simple Express над содержимым /web/content отображаются в виде списка ссылок при переходе к localhost:8888/public.Так, например:

..
index.html
header.jpg
js (folder)
css (folder)

Оттуда, если я нажму index.html или header.jpg, они будут отображаться правильно, но при нажатии на любую из этих папок будет (например) localhost:8888/js, даже еслиссылка явно ведет к localhost:8888/public/js.При дальнейшей проверке выясняется, что запрос отправляется по правильному пути (/public/js), но сервер возвращает ответ 301 - Moved Permanently, который затем перенаправляет браузер на /js, который переходит к отображению страницы с ошибкой, поскольку содержимоене может быть найден.(Нет, правда?)

Попытки запросить определенный файл под этими папками (т.е.: localhost:8888/public/js/main.js) работают нормально и не имеют такой же проблемы.

Сводит с ума то, что этонекоторое время делал это на моем устройстве разработки, а потом просто ... остановился.Не уверен почему.Однако при попытке развертывания на рабочем сервере возникла та же проблема, хотя я больше не могу воспроизвести ее в своей среде разработки.Кто-нибудь знает, почему Express, похоже, так сильно хочет переписать мои URL-адреса с ошибками?

1 Ответ

2 голосов
/ 05 октября 2011

Оказывается, ответ был довольно простым, и я пропустил его только из-за кеша в браузере. После анализа кода Express (ну, технически Connect) и обильного разбрызгивания его с помощью console.log () я проследил его до некоторого кода в статическом промежуточном программном обеспечении, который обнаруживал, что каталог содержит файл index.html, и пытался показать это вместо этого. Каким-то образом этот код получил неправильный путь, и произошло неправильное перенаправление.

Реальная проблема, однако, заключалась в том, что статический обработчик работал раньше, чем промежуточное программное обеспечение каталога, что является прямым результатом порядка, в котором было объявлено промежуточное программное обеспечение. Таким образом, просто переверните объявление промежуточного программного обеспечения следующим образом:

app.use("/public", express.directory("/web/content"));    
app.use("/public", express.static("/web/content"));

исправил проблему.

Теперь, я действительно пробовал это раньше, но не осознавал, что отправленные ранее 301 были кэшированы, и поэтому браузер перенаправлял меня, даже не касаясь сервера. После изменения порядка и очистки моего кэша я смог правильно ориентироваться в структуре каталогов.

Вздох Если бы у меня был доллар за каждую "ошибку", с которой я столкнулся из-за кеша браузера ...

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