一尘不染

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

node.js

是否有一种巧妙的方法将静态客户端文件资源(脚本,图像等)捆绑到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

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


阅读 241

收藏
2020-07-07

共1个答案

一尘不染

您可以创建的另一个实例,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)
2020-07-07