Express обслуживает статические файлы, которые не находятся в корневом каталоге - PullRequest
0 голосов
/ 18 ноября 2018

У меня есть веб-сайт с большим количеством HD-видео, поэтому я хочу разместить видеофайлы вне корневого веб-каталога.

Вот мой корневой веб-каталог:

/var/node/myapp

Длянекоторые базовые статические файлы, такие как javascript , css ... Я помещаю их в общий каталог.

/var/node/myapp/public

Для видеофайлов, которые я хочу поместить здесь

/hdd/videos

Это мой текущий статический код подачи:

app.use(serveStatic(path.join(__dirname, 'public'), {
    maxAge: keys.conf.maxAge,
    etag: true,
    setHeaders: setCustomCacheControl
  }));
  function setCustomCacheControl (res, path) {
    if (serveStatic.mime.lookup(path) === 'text/html') {
    res.setHeader('Cache-Control', 'public, max-age=0')
  }
}

Ответы [ 3 ]

0 голосов
/ 18 ноября 2018

Вы можете создать символическую ссылку в /var/node/myapp/public, чтобы указать /hdd/videos:

В Linux / Unix / OSX, например:

ln -s /hdd/videos /var/node/myapp/public/videos

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

Когдапользователь нажимает на ваш маршрут /videos, он будет искать его под /var/node/myapp/public согласно вашему статическому маршруту.Он увидит videos как ссылку и перейдет по этой ссылке на /hdd/videos, где будут доступны видео.

0 голосов
/ 18 ноября 2018

Вы можете установить несколько статических каталогов. Пример:

app.use(express.static('public', {etag: true, maxAge: keys.conf.maxAge}));
app.use(express.static('/hdd/videos'));

Однако путь, который вы указываете для функции express.static, относится к каталогу, из которого вы запускаете процесс вашего узла. Если вы запускаете экспресс-приложение из другого каталога, безопаснее использовать абсолютный путь к каталогу, который вы хотите обслуживать.

Документ для экспресс-статического файла в здесь

0 голосов
/ 18 ноября 2018

Если вы хотите получить доступ к каталогу вне корневого веб-сервера, вам нужно подняться на уровень каталога с помощью ... Вы не указали, где именно /hdd/videos относительно вашего корневого каталога, но он должен измениться, чтобы выглядеть примерно так:

var videosDirectory = __dirname + '/../../hdd/videos';
app.use(serveStatic(videosDirectory, {
    maxAge: keys.conf.maxAge,
    etag: true,
    setHeaders: setCustomCacheControl
    }));
    function setCustomCacheControl (res, path) {
      if (serveStatic.mime.lookup(path) === 'text/html') {
      res.setHeader('Cache-Control', 'public, max-age=0')
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...