Javascript 理解Express.js中间件优先级

Javascript 理解Express.js中间件优先级,javascript,node.js,http,express,httprequest,Javascript,Node.js,Http,Express,Httprequest,我正在阅读文章中的两个例子,但我不明白 例一 现在假设您希望忽略静态文件的日志记录请求,但继续记录日志记录器之后定义的路由和中间件。您可以简单地在其上方移动静态: app.useexpress.static__dirname+/public'; app.uselogger; //其他中间件 这是如何导致对静态文件的请求不被记录的?不是每个请求都按顺序执行所有中间件吗 例二 另一个具体示例是为多个目录中的文件提供服务,优先考虑./public: app.useexpress.static__dir

我正在阅读文章中的两个例子,但我不明白

例一 现在假设您希望忽略静态文件的日志记录请求,但继续记录日志记录器之后定义的路由和中间件。您可以简单地在其上方移动静态:

app.useexpress.static__dirname+/public'; app.uselogger; //其他中间件

这是如何导致对静态文件的请求不被记录的?不是每个请求都按顺序执行所有中间件吗

例二 另一个具体示例是为多个目录中的文件提供服务,优先考虑./public:

app.useexpress.static__dirname+/public'; app.useexpress.static__dirname+'/files'; app.useexpress.static__dirname+'/上传'

我怀疑对于像/js/stuff.js这样的请求,第一个中间件会检查/public/js/stuff.js是否存在。如果是这样,该中间件将处理请求,并且不会像早期返回那样执行任何后续中间件。但是,如果此路径不存在,则此中间件会将请求传递给队列中的下一个中间件。这是正确的吗


请解释这两个例子

快速路线只是中间件的集合。对服务器的每个请求都沿着中间件链传递

中间件函数具有签名

function(req, res, next) { }
您可以使用app.use将中间件添加到链中,如上所述

每个中间件有两种选择。它可以

将请求传递给链中的下一个中间件,或 结束请求链并发送响应 如果中间件不能做到这两个方面,您将看到您的请求超时,并且无休止地旋转

为了传递请求,中间件必须调用next。传递给中间件的第三个参数是下一个函数。它可能有副作用,就像上面的记录器中间件一样


为了结束请求,中间件可以使用附加到res对象的几种方法之一,例如res.send或res.end,将响应发送回请求者。因此,express.static中间件的行为是,如果找到请求的文件,它将结束请求链并发送文件。如果找不到请求的文件,它会将请求传递给下一个中间件。

快速路由只是中间件的集合。对服务器的每个请求都沿着中间件链传递

中间件函数具有签名

function(req, res, next) { }
您可以使用app.use将中间件添加到链中,如上所述

每个中间件有两种选择。它可以

将请求传递给链中的下一个中间件,或 结束请求链并发送响应 如果中间件不能做到这两个方面,您将看到您的请求超时,并且无休止地旋转

为了传递请求,中间件必须调用next。传递给中间件的第三个参数是下一个函数。它可能有副作用,就像上面的记录器中间件一样


为了结束请求,中间件可以使用附加到res对象的几种方法之一,例如res.send或res.end,将响应发送回请求者。因此,express.static中间件的行为是,如果找到请求的文件,它将结束请求链并发送文件。如果找不到请求的文件,它会将请求传递给下一个中间件。

我明白了。关键的一点是,一些中间件总是调用next,如日志记录、cookie解析等,而另一些中间件只有在next无法处理请求时才调用next。我认为应该在文档中更好地解释这种区别。我明白了。关键的一点是,一些中间件总是调用next,如日志记录、cookie解析等,而另一些中间件只有在next无法处理请求时才调用next。我认为应该在文档中更好地解释这种区别。