2015-01-30 1 views
1

Я использую express.static() для использования статических ресурсов. В частности, объект dotfiles аргумента options не создает ожидаемого поведения.Модуль NodeJS Express: параметры «dotfile» не работают

В экспресс документации говорится:

... express.static основан на подаче статическую, и отвечает за обслуживание статических активов ...

Кроме того, он утверждает, что подачи options аргумента express.static() должен иметь тот же эффект, что и служат статическим:

ДополнительногоОбъектможет иметь следующие свойства.

  • dotfiles option для обслуживания dotfiles. Возможные значения: «разрешить», «отрицать» и «игнорировать»; по умолчанию «игнорировать».

Это то, что служит антистатической документацией состояние опции dotfiles должно диктовать:

  • «не позволяет» Нет особого лечения составляет скрытые.

  • 'deny' Отправить 403 для любого запроса на dotfile.

  • «игнорировать» Притвориться, что dotfile не существует и вызывать next().

Самым кратким примером я могу придумать это код ниже. кажется, что ресурсы, обслуживаемые службой-статикой, ведут себя так, как ожидалось, однако express.static() игнорирует параметры при обслуживании одних и тех же ресурсов. То есть, несмотря на то, что аргумент {dotfiles : 'allow'} передается в express.static(), все запросы на ресурсы, начинающиеся с '.' вернуть ошибку 404.

Это происходит на версии узла v0.10.25, экспресс-версия 2.5.8, работающей на сервере ubuntu 14.04.1 LTS.

var express = require('express'); 
var app = module.exports = express.createServer(); 
var finalhandler = require('finalhandler'); 
var http = require('http'); 
var serveStatic = require('serve-static'); 

app.use('/', express.static('public', { 
    dotfiles : 'allow' 
})); 

app.listen(3001); 

var serve = serveStatic('public', { 
    dotfiles : 'allow' 
}); 

var server = http.createServer(function(req, res) { 
    serve(req, res, finalhandler(req, res)) 
}) 

server.listen(3002); 

Ожидает, что serve-static и express.static будут вести себя точно так же. Есть что-то, чего я не хватает? или это проблема, с которой столкнулся кто-то еще?

+0

Итак ... какой из них не работает должным образом? express.static или serveStatic? –

+0

Экспресс-версия '2.5.8'? Ваша экспресс-версия переводится в 'static' из Connect' 1.x', которая, похоже, не поддерживает аргумент 'dotfiles'. Документация, которую вы, вероятно, смотрите, предназначена для Express '4.x'. Можете ли вы обновить экспресс? Если нет, возможно, вы можете напрямую подключиться к ['serve-static'] (https://www.npmjs.com/package/serve-static). – loganfsmyth

ответ

1

Вы используете Экспресс 2.5.8 и документация, которую вы ищете, скорее всего подходит для 4.x. 2.5.8 не имеет опции dotfiles, потому что он использует соединение 1.x, которое не поддерживает его. Ваши два варианта:

  1. Вытяните в serve-static, как вы делаете в своем примере.
  2. Обновите свою версию express. 2.5.8 быстро приближается к 3 годам.
+0

Вот и все. Благодаря! По какой-то причине я поместил версию 2.5.8 в файл package.json. –