Express提供不在根目录中的静态文件

时间:2018-11-18 02:37:34

标签: javascript node.js express

我的网站上有很多高清视频,所以我想将视频文件放在Web根目录之外。

这是我的Web根目录:

/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 :(得分:1)

您可以设置多个静态目录。示例:

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

但是,您提供给express.static函数的路径是相对于您启动节点进程的目录的。如果您从另一个目录运行Express App,则使用您要提供服务的目录的绝对路径更为安全。

here中用于表达静态文件的文档

答案 1 :(得分:-1)

如果要在根Web服务器之外访问目录,则需要通过..进入目录级别。您没有指定/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')
    }
}

答案 2 :(得分:-1)

您可以在generator_next下创建一个symlink,以指向mikes.custom.iterator

在Linux / Unix / OSX上,例如:

/var/node/myapp/public

通过这种方式,您不会暴露整个根目录,并且可以将实际视频的存储位置与服务位置分开,而无需在添加/删除/复制等时复制或移动它们。

当用户点击您的路线/hdd/videos时,它将按照您的静态路线在ln -s /hdd/videos /var/node/myapp/public/videos 下查找。它将看到/videos作为链接,并通过该链接到达/var/node/myapp/public,在那里将提供视频。