node.js和express:是否可以从路由跳回到中间件(静态)?

node.js和express:是否可以从路由跳回到中间件(静态)?,node.js,express,Node.js,Express,在使用express server编写node.js时,我希望首先让路由中间件在静态中间件之前运行(希望在提供静态内容之前完全控制req/res) 现在,我还在最后使用*上匹配的路由来简单地返回404。显然,由于我没有静态内容的路由,我需要为静态(公共)文件夹添加路由。这样做时,我希望将控制权从路由内部传递到静态中间件,从而跳过404路由。可能吗?我读到我可以调用next(“route”),但这给了我与调用next()相同的结果 谢谢我不确定这是否有帮助,但如果您希望有选择地记录或拒绝静态文件下

在使用express server编写node.js时,我希望首先让路由中间件在静态中间件之前运行(希望在提供静态内容之前完全控制req/res)

现在,我还在最后使用*上匹配的路由来简单地返回404。显然,由于我没有静态内容的路由,我需要为静态(公共)文件夹添加路由。这样做时,我希望将控制权从路由内部传递到静态中间件,从而跳过404路由。可能吗?我读到我可以调用next(“route”),但这给了我与调用next()相同的结果


谢谢

我不确定这是否有帮助,但如果您希望有选择地记录或拒绝静态文件下载,您可以这样做:

首先,确保在静态中间件之前执行路由:

app.configure(function(){
...
    app.use(app.router); // this one goes first
    app.use(express.static(__dirname + '/public'));
...
第二,注册一个捕获所有请求的路由,然后有条件地响应。以下示例在下载文件-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()
    }
});

就是这样,我希望这有帮助。

您不需要显式添加
*
路由。Express将为您提供404服务

您所需要做的就是告诉express在静态中间件之前运行自定义路由。你这样做:

app.use(app.router);
app.use(express.static(__dirname + '/public');

为什么不将您的
*
404添加到
静态
之后?