使用Express的几个具有不同路径的单个静态目录

时间:2012-09-02 06:30:53

标签: node.js express

我希望能够让Express将几个目录(不仅仅是一个)视为“静态” - 也就是说,如果该文件存在,则提供服务。

Connect的static()模块似乎适用于那些想要在服务器根目录中的特定目录中创建文件的人。但是,这不是我想要的。我所追求的是最终得到这样的东西:

  • GET / modules / MODULE1 - >返回modules / MODULE1 / public
  • 中的文件
  • GET / modules / MODULE2 - >返回modules / MODULE2 / public
  • 中的文件
  • GET / modules / MODULE3 - >返回modules / MODULE3 / public
  • 中的文件

我正在查看static的来源,后者依次使用send,后者依次定义SendStream,它直接从请求获取文件路径(这不是什么我想要。)

有没有简单的方法可以做到这一点?

Merc的。

2 个答案:

答案 0 :(得分:1)

有什么问题
app.use('/modules/MODULE1', express.static('modules/MODULE1/public'))

每个模块?

答案 1 :(得分:0)

答案在这里:

https://groups.google.com/forum/?fromgroups=#!topic/express-js/kK9muR0mjR4

基本上:

var st = express.static(
    __dirname + app.set('path.static'), 
    { maxAge : app.set('static.expiry') }
);

app.get(/^\/static\/(v.+?\/)?(.+$)/, function (req, res, next) {
  req.url = req.params[1];
  st(req, res, next);
});

基本上,由于静态考虑req.url,这是一个黑客攻击的问题,以便在路径匹配时“看起来正确”。

我问TJ他是否愿意将其添加为选项,他(正确地)回答:

  

这不是send()应该做的事情,你已经可以通过connect / express与几个static()中间件轻松地做到这一点,你只需要做同样但更多的手册与send()

https://github.com/visionmedia/send/issues/10#issuecomment-8225096