Javascript 理解Express.js中间件优先级
我正在阅读文章中的两个例子,但我不明白 例一 现在假设您希望忽略静态文件的日志记录请求,但继续记录日志记录器之后定义的路由和中间件。您可以简单地在其上方移动静态: 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是否存在。如果是这样,该中间件将处理请求,并且不会像早期返回那样执行任何后续中间件。但是,如果此路径不存在,则此中间件会将请求传递给队列中的下一个中间件。这是正确的吗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
请解释这两个例子 快速路线只是中间件的集合。对服务器的每个请求都沿着中间件链传递 中间件函数具有签名
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。我认为应该在文档中更好地解释这种区别。