在node.js Express框架中设置两个不同的静态目录

可能吗? 我想设置两个不同的目录来提供静态文件。 比方说/ public和/ mnt

你也可以通过指定一个额外的(第一个)参数来use()像这样设置静态文件将被提供给web的path:

 app.use("/public", express.static(__dirname + "/public")); app.use("/public2", express.static(__dirname + "/public2")); 

这样你就可以在Web上得到两个不同的目录来镜像你的本地目录,而不是一个在两个本地目录之间进行故障转移的urlpath。

换句话说,URL模式:

 http://your.server.com/public/* 

在本地目录中public文件,同时:

 http://your.server.com/public2/* 

从本地目录public2提供文件。

顺便说一下,如果你不想让静态服务器从服务器的根文件,而是从更合适的path提供服务,这也是有用的。

HTH

一个中间件注入是不可能的,但是您可以多次注入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.staticconnect.static调用中定义, path是请求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); 

path只检查一次,如果找不到文件请求传递到下一个中​​间件。

Connect 2.x更新

Connect 2.x的代码链接是不实际的,但是多个静态中间件的使用仍然像以前一样可行。

您也可以将目录“合并”到一个可见的目录中

目录结构

  • /静态的
  • / alternate_static

 app.use("/static", express.static(__dirname + "/static")); app.use("/static", express.static(__dirname + "/alternate_static")); 

静态和alternate_static将被视为在同一个目录中。 不过要注意文件名。