Express中间件的介绍

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: Express中间件的介绍

Express中间件


中间件的概念


中间件的概念:


中间件就是把很复杂的事情分割成单个,然后依次有条理的执行。就是一个中间处理环节,有输入,有输出。


说的通俗易懂点儿,中间件就是一个(从请求到响应调用的方法)方法

把数据从请求到响应分步骤来处理,每一个步骤都是一个中间处理环节。

接下来我们使用Node.js创建一个HTTP服务器,并自定义三个中间件:cookie、query和post-body。 代码示例


var http = require('http');
var url = require('url');
var cookie = require('./expressPtoject/cookie');
var query = require('./expressPtoject/query');
var postBody = require('./expressPtoject/post-body');
var server = http.createServer(function(){
  // 解析请求地址中的get参数
  // var obj = url.parse(req.url,true);
  // req.query = obj.query;
  query(req,res); //中间件
  // 解析请求地址中的post参数
  req.body = {
    foo:'bar'
  }
});
if(req.url === 'xxx'){
  // 处理请求
  ...
}
server.listen(3000,function(){
  console.log('3000 runing...');
});


下面是对代码的解释:

  1. var http = require('http');这一行代码使用Node.js内置的http模块创建了一个HTTP服务器。
  2. var url = require('url');这一行代码使用Node.js内置的url模块来解析URL。
  3. var cookie = require('./expressPtoject/cookie');这一行代码导入了一个自定义的cookie模块,该模块可能包含了一些处理HTTP cookie的代码。
  4. var query = require('./expressPtoject/query');这一行代码导入了一个自定义的query模块,该模块可能包含了一些解析HTTP GET参数的代码。
  5. var postBody = require('./expressPtoject/post-body');这一行代码导入了一个自定义的post-body模块,该模块可能包含了一些解析HTTP POST参数的代码。
  6. var server = http.createServer(function(){...});这一行代码创建了一个HTTP服务器,并将一个匿名函数作为参数传递给createServer方法。这个函数是一个请求处理程序,会在每个HTTP请求到达服务器时被调用。
  7. query(req,res);这一行代码调用了导入的query模块的函数,该函数可能会解析HTTP GET参数,并将解析结果添加到req.query对象中。
  8. req.body = {...}这一行代码模拟了一个HTTP POST请求的请求体,并将其添加到req.body对象中。
  9. if(req.url === 'xxx'){...}这一行代码判断请求的URL是否是xxx,如果是,就处理该请求。
  10. server.listen(3000,function(){...});这一行代码让HTTP服务器开始监听端口3000,并在服务器启动时调用一个回调函数。该回调函数输出一条消息,表示服务器已经启动。

接下来我们设计一个中间件当用户在浏览器中访问 http://localhost:3000/abc 时,服务器将处理该请求并执行 app.get('/abc', ...) 中的回调函数。在第一个回调函数中,服务器将向 req 对象添加一个 body 属性,并将其设置为一个包含 nameage 属性的对象。在第二个回调函数中,服务器将向控制台输出 req.body,以及一个字符串 "/abc"。这段代码只处理 HTTP GET 请求,如果用户在浏览器中提交了 HTTP POST 请求,服务器将不会响应。

代码示例:


var express = require('express');
var app = express();
app.get('/abc',function(req,res,next){
  // 同一个请求的req和res是一样的,
  // 可以前面存储下面调用
  console.log('/abc');
  // req.foo = 'bar';
  req.body = {
    name:'xiaoxiao',
    age:18
  }
  next();
});
app.get('/abc',function(req,res,next){
  // console.log(req.foo);
  console.log(req.body);
  console.log('/abc');
});
app.listen(3000, function() {
  console.log('app is running at port 3000.');
});


上面这段代码使用了Express框架,创建了一个应用程序对象app,并监听了端口3000。在该应用程序中,使用app.get()方法创建了两个路由处理程序,路由地址均为“/abc”,并且都使用了中间件函数next()。

第一个路由处理程序使用了中间件函数,打印了字符串“/abc”,并将一个名为“body”的属性添加到req对象中。注意,在Express中,req对象和res对象在整个请求周期中都是同一个对象,因此可以在前面一个路由处理程序中将数据存储到req对象中,然后在后面的路由处理程序中进行调用。

第二个路由处理程序也使用了中间件函数,打印了字符串“/abc”,并且打印了前一个路由处理程序中存储在req对象中的“body”属性值。这个例子展示了在一个请求的生命周期中,可以有多个路由处理程序,它们可以共享req对象和res对象。


中间件的分类:


应用程序级别的中间件


可以万能匹配的中间件(不关心任何请求路径和请求方法的中间件):


app.use(function(req,res,next){
    console.log('Time',Date.now());
    next();
});


上面这段代码,使用 app.use() 方法将其注册到应用程序中。该中间件的作用是在每个请求处理之前打印当前时间,然后通过调用 next() 将请求传递给下一个中间件或路由处理程序。

在这个例子中,console.log('Time', Date.now()) 会在每个请求到达应用程序时打印当前时间戳。next() 会将控制权交给下一个中间件或路由处理程序。如果没有其他中间件或路由处理程序,则请求处理将结束,响应将被发送回客户端。

通过使用 app.use() 注册中间件,可以确保每个请求都会通过该中间件。这对于在所有请求中添加相同的处理逻辑非常有用,比如身份验证或日志记录。 关心请求路径和请求方法的中间件:


路由级别的中间件


严格匹配请求路径和请求方法的中间件

  • get:中间件


app.get('/',function(req,res){
  res.send('get');
});


  • post:中间件


app.post('/a',function(req,res){
  res.send('post');
});


  • put:中间件


app.put('/user',function(req,res){
  res.send('put');
});


  • delete:中间件


app.delete('/delete',function(req,res){
  res.send('delete');
});


总结和思考


Express中间件(middleware)是一种用于处理HTTP请求和响应的函数。中间件函数可以访问请求对象(request object)(req)、响应对象(response object)(res),以及应用程序的下一个中间件函数(next)。中间件函数可以用来执行各种任务,例如检查用户身份验证、解析请求体、设置响应头等。

Express中间件可以是应用程序级别的或路由级别的。应用程序级别的中间件将应用于整个应用程序,而路由级别的中间件将仅应用于特定的路由或路由组。

中间件函数可以是同步的或异步的。如果中间件函数执行了next(),那么它将把请求和响应传递到下一个中间件函数。如果没有调用next(),则不会传递请求和响应到下一个中间件函数。

在Express中使用中间件非常简单。只需要使用app.use()方法将中间件函数添加到应用程序的中间件堆栈中即可。例如,下面是一个将中间件函数添加到应用程序中的示例:


const express = require('express');
const app = express();
app.use((req, res, next) => {
  console.log('Logging middleware');
  next();
});
app.listen(3000, () => {
  console.log('Server started on port 3000');
});


上面的示例将“Logging middleware”输出到控制台,并调用next()将请求和响应传递给下一个中间件函数。

Express中间件是一个非常强大的功能,它使得我们能够轻松地添加各种功能和处理程序到我们的应用程序中。无论是构建Web应用程序还是API,中间件都是一个必不可少的组件。

目录
相关文章
|
JSON 前端开发 中间件
axios基本使用,express中间件
axios基本使用,express中间件
|
JSON JavaScript 中间件
node.js中Express框架路由,中间件
node.js中Express框架路由,中间件
|
1月前
|
Web App开发 JSON JavaScript
Node.js 中的中间件机制与 Express 应用
Node.js 中的中间件机制与 Express 应用
|
7月前
|
存储 缓存 JSON
玩转Express(二)登录态&中间件
玩转Express(二)登录态&中间件
|
6月前
|
JSON 中间件 API
中间件API示例(以Express.js为例)
【6月更文挑战第14天】
52 8
|
7月前
|
JavaScript 中间件 API
中间件应用Express.js(Node.js)
【5月更文挑战第3天】我们定义了一个名为 `logger` 的中间件函数。它接受请求对象、响应对象以及下一个中间件函数作为参数。当接收到请求时,它会打印出请求的 HTTP 方法和 URL,然后调用 `next()` 函数来将控制权传递给下一个中间件或路由处理器。我们使用 `app.use()` 方法将 `logger` 中间件添加到了应用级别的中间件堆栈中,这意味着它将对所有请求生效。
51 3
中间件应用Express.js(Node.js)
|
中间件
93 # 实现 express 错误处理中间件
93 # 实现 express 错误处理中间件
66 0
|
7月前
|
开发框架 JavaScript 中间件
深入探索Node.js的Express框架:使用与中间件详解
【4月更文挑战第30天】本文深入探讨了Node.js的Express框架,介绍了其作为Web开发的强大工具,主要聚焦于基本使用和中间件。Express是基于Node.js的Web应用框架,用于构建高效的应用和API。文章详细讲解了如何安装Express,创建简单应用,以及中间件的工作原理和应用,包括中间件的顺序、错误处理和挂载位置。此外,还提到了使用第三方中间件扩展功能。理解Express基础和中间件对于开发高质量Web应用至关重要。
|
7月前
|
Web App开发 JavaScript 前端开发
Express 框架的特点、使用方法以及相关的常用功能和中间件
Express 框架的特点、使用方法以及相关的常用功能和中间件
377 1
|
7月前
|
JavaScript 前端开发 中间件
Node.js—Express使用、Express 路由 、Express 中间件、托管静态资源、使用 Express 写接口、node.js链接sqlite数据库
Node.js—Express使用、Express 路由 、Express 中间件、托管静态资源、使用 Express 写接口、node.js链接sqlite数据库
250 0