返回

快来了解中间件 express!它是如何工作的?

前端

中间件 express 的工作原理:

  1. 在 express 中,中间件是以数组的形式定义的,它们按照定义的顺序执行。
  2. 当一个请求到达时,它会首先被第一个中间件处理。
  3. 中间件可以对请求和响应对象进行修改,也可以调用 next() 函数将请求传递给下一个中间件。
  4. 如果某个中间件没有调用 next() 函数,那么请求就会被终止。
  5. 最后一个中间件处理完请求后,请求就会到达路由处理函数。

中间件 express 的使用场景:

  1. 日志记录:中间件可以用来记录请求和响应的信息,以便进行故障排除和性能分析。
  2. 身份验证:中间件可以用来验证请求的合法性,比如检查请求是否包含有效的 token。
  3. 解析请求主体:中间件可以用来解析请求主体,并将解析后的结果存储在 req.body 对象中。
  4. 设置响应头:中间件可以用来设置响应头,比如设置 Content-Type 头或 Cache-Control 头。

中间件 express 的注意事项:

  1. 中间件必须是函数:中间件必须是一个函数,并且该函数的形参列表中必须包含 next() 参数。
  2. 中间件可以是同步的或异步的:中间件可以是同步的或异步的。同步的中间件可以直接调用 next() 函数,而异步的中间件必须在完成异步操作后调用 next() 函数。
  3. 中间件可以多次使用:中间件可以多次使用,并且可以按照不同的顺序使用。
  4. 中间件可以嵌套使用:中间件可以嵌套使用,这使得你可以创建更复杂的功能。

以下是 express 中间件的一些使用示例:

// 日志记录中间件
app.use(function (req, res, next) {
  console.log('收到请求:', req.url);
  next();
});

// 身份验证中间件
app.use(function (req, res, next) {
  if (!req.headers['authorization']) {
    return res.status(401).send('Unauthorized');
  }
  next();
});

// 解析请求主体中间件
app.use(express.json());

// 设置响应头中间件
app.use(function (req, res, next) {
  res.setHeader('Content-Type', 'application/json');
  next();
});

以下是 express 中间件的一些常见问题:

  1. 如何在中间件中访问请求对象和响应对象?
    可以通过形参列表来访问请求对象和响应对象。例如,在下面的中间件中,我们可以通过 req 和 res 来访问请求对象和响应对象:

    app.use(function (req, res, next) {
      console.log('收到请求:', req.url);
      next();
    });
    
  2. 如何在中间件中调用 next() 函数?
    可以通过 next() 函数来将请求传递给下一个中间件。例如,在下面的中间件中,我们可以通过调用 next() 函数来将请求传递给下一个中间件:

    app.use(function (req, res, next) {
      console.log('收到请求:', req.url);
      next();
    });
    
  3. 如何在中间件中终止请求?
    可以通过不调用 next() 函数来终止请求。例如,在下面的中间件中,我们可以通过不调用 next() 函数来终止请求:

    app.use(function (req, res, next) {
      if (!req.headers['authorization']) {
        return res.status(401).send('Unauthorized');
      }
      next();
    });
    
  4. 如何在中间件中设置响应头?
    可以通过 res.setHeader() 方法来设置响应头。例如,在下面的中间件中,我们可以通过 res.setHeader() 方法来设置 Content-Type 头:

    app.use(function (req, res, next) {
      res.setHeader('Content-Type', 'application/json');
      next();
    });
    
  5. 如何在中间件中解析请求主体?
    可以通过 express.json() 中间件来解析请求主体。例如,在下面的代码中,我们可以通过 express.json() 中间件来解析请求主体:

    app.use(express.json());