是否有一种优雅的方法将静态客户端文件资源(脚本,图像等)捆绑到Express模块中并系统地避免命名冲突?注册静态对象的模块特定实例很容易,如下所示:
app.use(express.static(modulePath + '/public'));
app.use(express.static(__dirname + '/public'));
但是如果两个目录都包含“styles.css”文件,那么模块中的那个文件似乎会遮挡应用程序的那个。模块public中的子目录可用于避免此问题,但我真正想要的是一种将模块资源映射到任意路径的方法,以便
http://localhost:3000/mymodule/styles.css => <modulePath>/public/styles.css
http://localhost:3000/styles.css => <appPath>/public/styles.css
有没有办法做到这一点?我已经用编码技巧完成了它,所以我真的在寻找推荐的方法来完成它。此外,如果我遗漏了一些使这完全没必要的关键概念,我也想了解这一点。
答案 0 :(得分: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)
答案 1 :(得分:3)
这样的事情也应该有效:
app.use(express.static(__dirname + '/public'));
app.use('/mymodule', express.static(modulePath + '/public'));
请参阅:http://groups.google.com/group/express-js/browse_thread/thread/c653fafc35fa85ed