返回

初探 Node.js Express 中间件

前端

今天我们继续探索 Node.js Express 中间件,深入了解其工作原理和常见用法。

1. 中间件简介

中间件是 Express 提供的一种特殊 URL 地址处理函数,它在请求到达路由处理函数之前执行。中间件可以完成各种任务,例如:

  • 解析请求主体:

    • express.json() 和 express.urlencoded() 中间件可用于解析请求主体。
  • 身份验证和授权:

    • 您可以使用中间件来验证传入请求的令牌,或根据用户角色授权他们访问特定资源。
  • 记录和日志记录:

    • 您可以在中间件中记录请求信息,以帮助您调试和排除错误。
  • 添加 headers:

    • 您可以在中间件中为响应添加 headers,例如 Content-TypeCache-Control headers。

2. 中间件的使用

您可以通过在 Express 应用程序中使用 app.use() 方法来使用中间件。您可以将中间件作为单独的函数传递给 app.use(),或使用内联箭头函数。

以下是一个使用中间件记录请求信息的示例:

app.use((req, res, next) => {
  console.log(`Received request for ${req.method} ${req.url}`);
  next();
});

3. 中间件类型

Express 提供了几种内置的中间件,包括:

  • express.json(): 解析 JSON 请求主体。
  • express.urlencoded(): 解析 URL 编码的请求主体。
  • express.cookieParser(): 解析 Cookie。
  • express.session(): 管理用户会话。
  • express.static(): 提供静态文件服务。

4. 自定义中间件

您还可以创建自己的自定义中间件。自定义中间件可以完成各种任务,例如:

  • 验证请求:

    • 您可以创建自定义中间件来验证传入请求的令牌,或根据用户角色授权他们访问特定资源。
  • 记录和日志记录:

    • 您可以在自定义中间件中记录请求信息,以帮助您调试和排除错误。
  • 添加 headers:

    • 您可以在自定义中间件中为响应添加 headers,例如 Content-TypeCache-Control headers。

以下是一个创建自定义中间件来验证请求的示例:

const auth = (req, res, next) => {
  const token = req.headers['authorization'];
  if (!token) {
    return res.status(401).json({ error: 'Unauthorized' });
  }

  try {
    const decoded = jwt.verify(token, process.env.JWT_SECRET);
    req.user = decoded;
    next();
  } catch (error) {
    return res.status(401).json({ error: 'Unauthorized' });
  }
};

然后,您可以使用 app.use() 方法将自定义中间件应用到 Express 应用程序:

app.use(auth);

5. 结论

中间件是 Express 提供的一种强大工具,可用于扩展框架并使其更具灵活性。您可以使用中间件来完成各种任务,例如解析请求主体、验证请求、记录请求信息等等。

在实际项目中,中间件经常被用来实现跨域资源共享 (CORS)、身份验证和授权、请求日志记录、缓存等功能。如果您想了解有关 Express 中间件的更多信息,请查看 Express 文档。