Node.js模块特有的静态资源

有没有一个优雅的方式来捆绑静态客户端文件资源(脚本,图像等)到一个Express模块​​,并系统地避免命名冲突? 注册一个特定于模块的静态对象实例是很简单的,就像这样:

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

但是如果两个目录都包含一个“styles.css”文件,那么看起来模块中的一个会隐藏应用程序的一个。 模块公共内部的一个子目录可以用来避免这个问题,但我真正想要的是一种将模块资源映射到任意path的方法,

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

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

您可以创build另一个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) 

像这样的东西也应该工作:

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

请参阅: http : //groups.google.com/group/express-js/browse_thread/thread/c653fafc35fa85ed