node-static не может обслуживать папку выше текущей папки
Я не знаю, если это ограничение node-static
или это ошибка в моем коде, но я не могу заставить ее обслуживать файлы выше или за пределами текущей директории. Моя текущая структура каталогов такая:
project
public
...public stuff here...
system
core
server.js
server.js
живет в core
каталог, делая путь к public
как ../../public
- но этот код не будет работать. Возвращает 404.
staticServer = new (static.Server)('../../public');
webServer = http.createServer(function (request, response) {
staticServer.serve(request,response);
})
webServer.listen(appServerConfig.port, appServerConfig.address);
Тем не менее, если я изменю структуру, чтобы сделать общедоступную папку рядом с server.js
и измените код соответственно, это работает:
project
system
core
server.js
public
...public stuff here...
staticServer = new (static.Server)('./public');
webServer = http.createServer(function (request, response) {
staticServer.serve(request,response);
})
webServer.listen(appServerConfig.port, appServerConfig.address);
Почему это так?
1 ответ
Имейте в виду, что использование относительных путей разрешит эти пути относительно текущего рабочего каталога процесса node.js, то есть каталога, в котором вы находились при запуске node server.js
, Так что, как закодировано, вы могли бы выглядеть нормально для меня, пока вы в core
каталог при запуске узла. Вы уверены, что всегда запускаете узел с core
каталог?
Если вы хотите быть независимым от cwd (более надежным IMHO), используйте __dirname
чтобы получить абсолютный путь к каталогу текущего файла, а затем привязать к нему относительные пути: __dirname + '/../../public'
,
Кроме того, рассмотрите fs.realpath, чтобы решить их. Я не могу сказать, есть ли у node-static, в частности, специальный код для предотвращения этого, но большинство других модулей, которые я видел, например, статическое промежуточное ПО connect, с радостью будет обслуживать любой произвольный каталог без особых ограничений.