在使用快速服务器编写node.js时,我想首先在静态中间件之前运行路由中间件(希望在提供静态内容之前完全控制req / res)。
现在,我也在最后使用*匹配的路由来简单地返回404.显然,由于我没有静态内容的路由,我需要为我的静态(公共)文件夹添加路由。这样做时,我想将控制从路径内部传递给静态中间件,从而跳过我的404路由。那可能吗?我读过我可以调用next(“route”),但是这给了我与调用next()相同的结果。
由于
答案 0 :(得分:3)
您无需明确添加*
路由。 Express会为你做404。
您需要做的就是告诉express在静态中间件之前运行自定义路由。你这样做是这样的:
app.use(app.router);
app.use(express.static(__dirname + '/public');
答案 1 :(得分:0)
我不确定这是否有帮助,但如果您想要的是有选择地记录或拒绝静态文件下载,您可以这样做:
首先,确保在静态中间件之前执行路由:
app.configure(function(){
...
app.use(app.router); // this one goes first
app.use(express.static(__dirname + '/public'));
...
其次,注册一个捕获所有请求的路由,并且只是有条件地响应。下面的示例将在下载file-A.txt(文件系统路径为/public/file-A.txt)时检测并记录消息,任何其他文件请求将在不中断的情况下下载:
app.get('/*', function(req, res, next){
if(req.params[0] === 'file-A.txt') { // you can also use req.uri === '/file-A.txt'
// Yay this is the File A...
console.warn("The static file A has been requested")
// but we still let it download
next()
} else {
// we don't care about any other file, let it download too
next()
}
});
就是这样,我希望这会有所帮助。