2011-10-12 53 views
4

是否有一种将静态客户端文件资源(脚本,图像等)捆绑到Express模块​​并系统地避免命名冲突的优雅方法?这是很容易注册的静态对象的特定模块实例,像这样:Node.js模块特定的静态资源

app.use(express.static(modulePath + '/public')); 
app.use(express.static(__dirname + '/public')); 

但如果这两个目录中包含“styles.css的”文件,它似乎是从模块的一个将超过一为应用程序。模块的公众中的子目录可以用来避免这个问题,但我真正想要的是模块的资源映射到这样的任意路径的方式,

http://localhost:3000/mymodule/styles.css => <modulePath>/public/styles.css 
http://localhost:3000/styles.css => <appPath>/public/styles.css 

是否已有一个办法做到这一点?我已经完成了编码技巧,所以我真的在寻找推荐的方法来完成它。另外,如果我错过了一些完全不必要的关键概念,我也想了解这一点。

回答

5

您可以创建connect.static另一个实例和路线中使用它:

app = express.createServer() 

app.configure(function(){ 
    app.use(express.static(__dirname+'/public')) 
}) 

// new static middleware 
var myModuleStatic = express.static(__dirname+'/mymodule') 

// catch all sub-directory requests 
app.get('/mymodule/*', function(req, res){ 
    // remove subdir from url (static serves from root) 
    req.url = req.url.replace(/^\/mymodule/, '') 
    // call the actual middleware, catch pass-through (not found) 
    myModuleStatic(req, res, function(){ 
     res.send(404) 
    }) 
}) 

app.listen(5555) 
+0

钉它。谢谢。 –