Подтвердить что ты не робот

Настройка двух разных статических каталогов в node.js Express framework

Возможно ли это? Я хотел бы настроить два разных каталога для обслуживания статических файлов. Пусть say/public и/mnt

4b9b3361

Ответ 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 будут обслуживаться так, как если бы они находились в одном каталоге. Тем не менее, следите за файловыми клоберами.