在Express中是否有任何标准方法将文件扩展名映射到特定的中间件适配器?
当生成中以".map"
结尾的文件扩展名请求时,我想明确返回404,但在开发过程中,文件将被提供/允许(如果存在)。
此外,我注意到如果"map"
文件(the source map file)不存在,即使文件不存在,会话提供程序仍会激活该请求(是低效的)。因此,这也有助于防止不必要的会话加载/保存。
在安装session
的中间件之前,我添加了以下代码:
app.use(function(req, res, next) {
if (req && req.originalUrl) {
var originalUrl = url.parse(req.originalUrl);
var testMap = /^.*\.map$/;
if (testMap.test(originalUrl.pathname)) {
console.log("[MAP] %s %s", req.method, req.url);
res.send(404);
res.end();
return;
} else {
next();
}
}
});
虽然有效:
[MAP] GET /javascripts/vendor/jquery.min.map
我以为我可以使用use
的第一个参数指定文件路径(特别是扩展名)?但是,我似乎无法使语法正确(我尝试了上面使用的正则表达式,但它似乎不起作用)。
app.js
文件的块上方的行):// all environments
app.set('port', process.env.PORT || 4000);
app.set('views', path.join(process.cwd(), 'views'));
app.set('view engine', 'dust');
app.engine('dust', dustjs.dust({
layout: 'main_layout',
cache: false
}));
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.methodOverride());
app.use(express.cookieParser(cookieSecret));
// I've tried to move this before and after the "map" code, to no effect
app.use(express.static(path.join(__dirname, 'public')));
答案 0 :(得分:1)
这应该有用;
app.use('*.map', function (req, res, next) {
// disable requests ending in .map in production
if ('production' === app.get('env')) {
console.log("[MAP] %s %s", req.method, req.url);
res.send(404);
} else {
next();
}
});