从Express静态目录只提供.js文件?

时间:2014-03-13 23:29:22

标签: javascript regex node.js express static

我想知道是否可以从Express.js静态目录中仅提供一种类型的文件(按扩展名过滤)。

例如,假设我有以下静态目录:

Static
    FileOne.js
    FileTwo.less
    FileThree.html
    FileFour.js

并说我想只为任何给定请求提供{{1>}扩展名为文件,而所有其他请求都会获得500响应(或类似内容)。

我将如何实现这一目标? Express是否有我无法找到的烘焙过滤器,或者我是否需要使用正则表达式?

2 个答案:

答案 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'))