ExpressJS: Как мне игнорировать общедоступные статические файлы в моем маршруте? - PullRequest
7 голосов
/ 16 июля 2011
app.get("/:name?/:group?", function(req, res){...

соответствует файлам, которые находятся в моем общедоступном каталоге. Так что, если я включу таблицу стилей:

<link type="text/css" href="/stylesheets/style.css" />

Узел будет соответствовать /stylesheets/style.css и назначит имя значение таблицы стилей и группа значение style.css .

Какой лучший способ избежать этого?

Ответы [ 3 ]

22 голосов
/ 17 июля 2011

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

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

Таким образом, статический файл найдет его и ответит, и маршрутизатор не будет запущен.У меня была похожая путаница с ошибкой положения маршрутизатора по умолчанию (последней), связанной с моей компиляцией файлов coffeescript.К вашему сведению, здесь есть документы здесь (найдите на странице app.router, и вы увидите пояснительный абзац.

2 голосов
/ 20 июля 2011

Вы также можете использовать обратный прокси-сервер, например Nginx для обработки статических файлов.Я полагаю, что многие профессиональные установки Node / Ruby on Rails делают это таким образом.

1 голос
/ 17 июля 2011

Для тех, кому это может понадобиться, моим решением было использование Middleware.Если кто-нибудь найдет лучшее решение, пожалуйста, дайте мне знать!

public = ['images', 'javascripts', 'stylesheets', 'favicon.ico']

ignore = (req, res, next) ->
    if public.indexOf(req.params.name) != -1
        console.log "Ignoring static file: #{req.params.name}/#{req.params.group}"
        next('route')
    else
        next()

app.get "/:name?/:group?", ignore, (req, res) -> ...
...