Возможно ли это? Я хотел бы настроить два разных каталога для обслуживания статических файлов. Пусть say/public и/mnt
Настройка двух разных статических каталогов в node.js Express framework
Ответ 1
Вы также можете указать путь к тому, что статические файлы будут переданы в Интернет, указав дополнительный параметр (первый) на use()
следующим образом:
app.use("/public", express.static(__dirname + "/public"));
app.use("/public2", express.static(__dirname + "/public2"));
Таким образом, вы получаете два разных каталога в Интернете, которые отражают ваши локальные каталоги, а не один путь URL-адреса, который выходит из строя между двумя локальными каталогами.
Другими словами, шаблон URL:
http://your.server.com/public/*
Служит для загрузки файлов из локального каталога public
, а:
http://your.server.com/public2/*
Служит для загрузки файлов из локального каталога public2
.
Кстати, это также полезно, если вы не хотите, чтобы static обслуживал файлы из корня вашего сервера, а скорее из более квалифицированного пути.
НТН
Ответ 2
Это невозможно для одной промежуточной инъекции, но вы можете несколько раз добавить static
промежуточное ПО:
app.configure('development', function(){
app.use(express.static(__dirname + '/public1'));
app.use(express.static(__dirname + '/public2'));
});
Объяснение
Посмотрите connect/lib/middleware/static.js # 143:
path = normalize(join(root, path));
Существует options.root
- статический корень, который вы определяете в вызове express.static
или connect.static
, а path
- путь запроса.
Посмотрите больше на connect/lib/middleware/static.js # 154:
fs.stat(path, function(err, stat){
// ignore ENOENT
if (err) {
if (fn) return fn(err);
return ('ENOENT' == err.code || 'ENAMETOOLONG' == err.code)
? next()
: next(err);
Путь проверяется только один раз, и если файл не найден, запрос переходит к следующему промежуточному программному обеспечению.
Обновление для подключения 2.x
Ссылки на код неактуальны для Connect 2.x, но использование статического промежуточного программного обеспечения по-прежнему возможно, как и раньше.
Ответ 3
Вы также можете "объединить" каталоги в один видимый каталог
Структура каталогов
- /статические
- /alternate_static
код
app.use("/static", express.static(__dirname + "/static"));
app.use("/static", express.static(__dirname + "/alternate_static"));
Оба статических и alternate_static будут обслуживаться так, как если бы они находились в одном каталоге. Тем не менее, следите за файловыми клоберами.