我想知道是否可以在Express.js静态目录中只提供一种类型的文件(通过扩展名过滤)。
例如,假设我有以下静态目录:
Static
FileOne.js
FileTwo.less
FileThree.html
FileFour.js并且假设我只想使具有.js扩展名的文件对任何给定的请求可用,那么所有其他请求都会得到500个响应(或者类似的响应)。
我怎样才能做到这一点呢?Express有一个我无法找到的内置过滤器,还是需要使用正则表达式?
发布于 2014-03-14 00:20:43
我使用
app.get(/static\/.*js$/, function(r, s){或
app.get('*', function(r, s){
if(r.url.match(/.*js$/)) // then serve
})发布于 2014-03-14 00:08:47
在我看来,您不可能以这种方式配置“静态”中间件。在“服务-静态”模块中,它取代了Exchange4.0的“静态”(目前处于RC阶段),有一些选项,但没有过滤。
如果您只想提供*.js文件,您可以自己创建一个路由。如果请求的文件为.js,则创建一个具有文件内容和适当mime类型的响应的.js。
另一种选择是分叉“静态”模块,或者更好地使用新的“服务静态”,这样它就能满足您的需要。例如,您可以创建一个复制这个文件内容的新库,并在行之后创建
var originalUrl = url.parse(req.originalUrl);您可以添加这样的内容
if(originalUrl.slice(-3) != '.js') return next();这应该忽略(调用下一个中间件)对不以".js“结尾的静态文件的所有请求。(未经测试,但受上面代码的启发)
使用上面的代码,创建一个新的库(例如,将它保存在“lib/my-static.js”中)并包括它:
app.use(require('lib/my-static'))https://stackoverflow.com/questions/22393187
复制相似问题