是否有一种巧妙的方法将静态客户端文件资源(脚本,图像等)捆绑到Express模块中,并系统地避免命名冲突?注册静态对象的模块特定实例非常容易,如下所示:
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
有没有办法做到这一点?我已经用编码技巧完成了它,所以我真的在寻找完成它的推荐方法。另外,如果我错过了一些根本不需要这样做的关键概念,我也想学习一下。
您可以创建的另一个实例,connect.static并在路由中使用它:
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)