next() 如何在 express 中工作以及在 res.send() 之后会发生什么?

问题描述

const express = require('express');

const app = express();

app.use('/',(req,res,next) => {
    console.log('This always runs!');
    next();
});

app.use('/add-product',next) => {
  console.log('In add product middleware!');
  res.send('<h1>The "Add Product" Page</h1>');
});

app.use('/',next) => {
  console.log('In another middleware!');
  res.send('<h1>Hello from Express!</h1>');
});

app.listen(3000);

NodeJS / Express: what is "app.use"? 我从这篇文章中读到,仍然对这个程序中的控制流如何进行感到困惑。如果我访问“localhost:3000/add-product”,记录的结果是“这总是运行!在添加产品中间件中!这个总是运行!在另一个中间件中!”(我省略了更改线) 这是否意味着在它进入第二个 app.use 之后,正如我所了解的,每次向服务器发送请求时都会调用每个 app.use(middleware)。所以这个过程重新启动,但为什么这次是 next( ) 会导致第三个 app.use 被调用?我以为 next 会进入下一个匹配路径..

解决方法

route 的顺序在 express 中很重要

基于first come first serve的快速匹配路由,就像队列一样。

如果路由匹配,那么您作为回调传递的任何函数都会被调用。

在你的情况下: 路线 1:匹配每条路线 路线 2:匹配 /add-product 路线 3:匹配每条路线

所以检查的顺序是 1 -> 2 -> 3

所以如果我给 GET 打电话 (1) 和 (2) 将被称为 和以下日志

/add-product

虽然调用 This always runs! In add product middleware! 将 导致 (1) 和 (3) 被调用。

/

This always runs! In another middleware! 只是将控制权传递给下一个中间件