在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.static
或connect.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将被视为在同一个目录中。 不过要注意文件名。