AJB*_*AJB 5 javascript regex static node.js express
我正在寻找是否可以从 Express.js 静态目录中仅提供一种类型的文件(按扩展名过滤)。
例如,假设我有以下静态目录:
Static
FileOne.js
FileTwo.less
FileThree.html
FileFour.js
Run Code Online (Sandbox Code Playgroud)
说我想打只用一个文件.js到任何给定的要求提供的扩展,以及所有其他请求会得到响应500(或类似的东西)。
我将如何实现这一目标?Express 是否有我找不到的内置过滤器,或者我是否需要使用正则表达式?
我用
app.get(/static\/.*js$/, function(r, s){
Run Code Online (Sandbox Code Playgroud)
或者
app.get('*', function(r, s){
if(r.url.match(/.*js$/)) // then serve
})
Run Code Online (Sandbox Code Playgroud)
在我看来,您不能以这种方式配置“静态”中间件。在“serve-static”模块中,它是 Express 4.0(目前处于 RC 阶段)“static”的替代品,有一些选项,但没有过滤。
如果您只想提供 *.js 文件,您可以自己创建一个路由。如果请求的文件是 .js,则创建一个app.get('/static/*')响应文件内容和正确的 mime 类型的文件。
另一种方法是分叉“static”模块,或者更好的新“serve-static”模块,这样它就可以满足您的需求。例如,您可以创建一个新库,复制该文件的内容,并在该行之后
var originalUrl = url.parse(req.originalUrl);
Run Code Online (Sandbox Code Playgroud)
你可以添加类似的东西
if(originalUrl.slice(-3) != '.js') return next();
Run Code Online (Sandbox Code Playgroud)
这应该忽略(调用下一个中间件)对不以“.js”结尾的静态文件的所有请求。(未经测试,但受到上面代码的启发)
使用上面的代码,创建一个新库(例如将其保存在“lib/my-static.js”中)并包含它:
app.use(require('lib/my-static'))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2138 次 |
| 最近记录: |