it编程 > 前端脚本 > Node.js

Express中全局中间件与局部中间件的使用

12人参与 2025-02-13 Node.js

express 是 node.js 生态系统中最流行的 web 应用框架之一,提供了简洁的 api,便于开发者创建 web 应用程序和 restful api。本文将详细介绍 express 中的全局中间件与局部中间件,帮助开发者更好地理解两者的区别、用法以及在实际项目中的应用场景。

一、express 中的中间件概述

1. 什么是中间件?

中间件(middleware)是 express 应用程序中处理请求的函数,通常用于处理 http 请求和响应的过程。中间件可以访问请求对象(req)、响应对象(res)以及应用程序的下一个中间件函数。其主要作用是处理请求数据、进行身份验证、记录日志、处理错误等。

中间件可以通过以下三种方式应用:

2. express 中的中间件执行顺序

在 express 中,中间件是按照定义的顺序依次执行的。当一个中间件处理完毕后,可以通过调用 next() 函数将控制权传递给下一个中间件。如果不调用 next(),则请求将会挂起,后续的中间件或路由不会被执行。

二、全局中间件的作用与用法

1. 什么是全局中间件?

全局中间件是指在应用程序启动时注册的中间件,这些中间件对所有路由和请求生效。通常用于一些通用的处理逻辑,比如解析请求体、处理静态文件、添加全局响应头等。

2. 常见的全局中间件示例

以下是一些常用的全局中间件示例:

(1) 解析 json 请求体的中间件

express 内置了 express.json() 中间件,用于解析请求体中的 json 数据:

const express = require('express');
const app = express();

// 全局解析 json 请求体
app.use(express.json());

app.post('/data', (req, res) => {
  res.send(req.body);  // 输出解析后的 json 数据
});

app.listen(3000, () => {
  console.log('server running on port 3000');
});

(2) 日志记录中间件

开发者可以使用第三方中间件如 morgan 来记录 http 请求日志:

const express = require('express');
const morgan = require('morgan');
const app = express();

// 全局日志记录中间件
app.use(morgan('combined'));

app.get('/', (req, res) => {
  res.send('hello world');
});

app.listen(3000, () => {
  console.log('server running on port 3000');
});

(3) 静态文件处理中间件

使用 express.static() 处理静态文件请求:

const express = require('express');
const app = express();

// 全局处理静态文件
app.use(express.static('public'));

app.listen(3000, () => {
  console.log('server running on port 3000');
});

在这个例子中,public 目录下的文件可以通过 / 直接访问,例如 public/index.html 可以通过 http://localhost:3000/index.html 访问。

3. 全局中间件的使用场景

全局中间件通常用于以下场景:

三、局部中间件的作用与用法

1. 什么是局部中间件?

局部中间件是指仅在特定路由或一组路由中生效的中间件。这种中间件只会在匹配到特定路由时执行,适用于那些只针对部分路由进行的处理逻辑。

2. 局部中间件的定义与使用

局部中间件的定义通常是在路由处理函数之前,作为参数传递给路由。以下是一个简单的示例:

const express = require('express');
const app = express();

// 局部中间件函数
const checkauth = (req, res, next) => {
  const auth = req.headers.authorization;
  if (auth === 'secret-token') {
    next();  // 如果验证通过,继续处理下一个中间件或路由
  } else {
    res.status(403).send('forbidden');  // 否则返回 403
  }
};

// 在特定路由中使用局部中间件
app.get('/protected', checkauth, (req, res) => {
  res.send('this is a protected route');
});

app.listen(3000, () => {
  console.log('server running on port 3000');
});

在这个例子中,checkauth 中间件只对 /protected 路由生效,用于验证请求头中的 authorization 是否匹配。

3. 多个局部中间件的使用

express 支持在单个路由中使用多个局部中间件。可以通过链式调用来实现这一点:

const express = require('express');
const app = express();

const middleware1 = (req, res, next) => {
  console.log('middleware 1');
  next();
};

const middleware2 = (req, res, next) => {
  console.log('middleware 2');
  next();
};

app.get('/example', middleware1, middleware2, (req, res) => {
  res.send('hello from /example route');
});

app.listen(3000, () => {
  console.log('server running on port 3000');
});

在 /example 路由中,middleware1 和 middleware2 都会按顺序执行,然后再由路由处理函数发送响应。

4. 局部中间件的使用场景

局部中间件通常用于以下场景:

四、全局中间件与局部中间件的区别

全局中间件与局部中间件的主要区别在于它们的作用范围:

特性全局中间件局部中间件
作用范围对所有请求生效只对特定路由或请求生效
典型用途解析请求体、处理静态文件、身份验证等权限验证、参数处理、日志记录等
执行顺序按照在应用程序中注册的顺序执行按照在路由中定义的顺序执行
应用场景通用功能,如请求解析、错误处理等特定场景,如单一路由的权限验证等

五、总结

在 express 应用程序中,全局中间件与局部中间件各有用途。全局中间件用于处理那些适用于整个应用程序的通用逻辑,如请求体解析、日志记录等。而局部中间件则可以在特定路由中应用,提供更精细化的控制,如路由权限验证或请求预处理。

到此这篇关于express中全局中间件与局部中间件的使用的文章就介绍到这了,更多相关express 全局中间件与局部中间件内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)
打赏 微信扫一扫 微信扫一扫

您想发表意见!!点此发布评论

推荐阅读

node.js中跨域请求实现方法详解

02-13

深入理解Node.js中CORS的三个重要响应头

02-13

nvm对Node.js进行版本控制的实现

02-13

Node.js中Express生成Token的实现方法

02-13

Node.js使用sharp库实现PNG图片转换为WebP格式

02-13

深入解析Node.js中save-dev命令的具体使用

02-13

猜你喜欢

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论