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

Node.js模块特定的静态资源,node.js,static,express,router,Node.js,Static,Express,Router,是否有一种优雅的方式将静态客户端文件资源(脚本、图像等)捆绑到Express模块中,并系统地避免命名冲突?注册静态对象的模块特定实例非常简单,如下所示: app.use(express.static(modulePath + '/public')); app.use(express.static(__dirname + '/public')); 但是,如果两个目录都包含一个“styles.css”文件,那么来自模块的目录似乎会使应用程序的目录相形见绌。可以使用模块公共目录中的子目录来避免此问题

是否有一种优雅的方式将静态客户端文件资源(脚本、图像等)捆绑到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
http://localhost:3000/mymodule/styles.css =>/public/styles.css
http://localhost:3000/styles.css =>/public/styles.css

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

您可以创建另一个
connect.static
实例,并在路由中使用它:

app=express.createServer()
app.configure(函数(){
app.use(express.static(u dirname+'/public'))
})
//新的静态中间件
var myModuleStatic=express.static(u dirname+'/mymodule')
//捕获所有子目录请求
app.get('/mymodule/*',函数(req,res){
//从url中删除子目录(从根目录中删除静态服务)
req.url=req.url.replace(/^\/mymodule/,“”)
//调用实际中间件,捕获传递(未找到)
myModuleStatic(请求、恢复、函数(){
res.send(404)
})
})
app.listen(5555)

类似的方法也应该有效:

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

请参阅:

这样做有缺点吗?否则,为什么这不是最好的答案?这要简单得多。