我想知道是否可以从Express.js静态目录中仅提供一种类型的文件(按扩展名过滤)。
例如,假设我有以下静态目录:
Static
FileOne.js
FileTwo.less
FileThree.html
FileFour.js
并说我想只为任何给定请求提供{{1>}扩展名为的文件,而所有其他请求都会获得500响应(或类似内容)。
我将如何实现这一目标? Express是否有我无法找到的烘焙过滤器,或者我是否需要使用正则表达式?
答案 0 :(得分:2)
我用
app.get(/static\/.*js$/, function(r, s){
或
app.get('*', function(r, s){
if(r.url.match(/.*js$/)) // then serve
})
答案 1 :(得分:1)
我觉得你不能配置"静态"这样的中间件。在"serve-static" module中,它取代了"静态"对于Express 4.0(目前处于RC阶段),有一些选项,但不是过滤。
如果您只想提供* .js文件,您可以自己创建路线。如果请求的文件是.js,则创建一个响应文件内容和正确mime类型的app.get('/static/*')
。
另一种方法是分叉"静态"模块,或更好的新" serve-static",以满足您的需求。 例如,您可以创建一个复制this file内容的新库,并在行
之后var originalUrl = url.parse(req.originalUrl);
您可以添加类似
的内容if(originalUrl.slice(-3) != '.js') return next();
这应忽略(调用下一个中间件)对静态文件的所有请求,这些请求不会以" .js"结尾。 (未经测试,但受上述代码的启发)
使用上面的代码,创建一个新库(例如将其保存在" lib / my-static.js")并包含它:
app.use(require('lib/my-static'))