从零学习node.js之express入门(六)

yizhihongxing

让我来详细讲解一下“从零学习node.js之express入门(六)”的完整攻略。

一、前置知识

在开始本文之前,需要掌握以下基础知识:

  • Node.js基础知识
  • HTTP协议基础知识
  • HTML、CSS、JavaScript基础及其开发工具的使用
  • express框架的基础知识

如果您还不具备相关的基础知识,可以先查看相关的基础教程,建议先学习“从零学习node.js之express入门(一)”到“从零学习node.js之express入门(五)”相关教程,然后再来学习这篇文章。

二、什么是中间件

中间件就是为了处理请求和响应之间的一些通用逻辑,例如:日志记录、压缩、权限验证等。

其中,express的中间件是基于洋葱圈模型来实现的,请求从最外层开始,逐层进入内部中间件,最后再从内部中间件一层一层回到最外层,最终响应给客户端,整个过程就像一个洋葱圈一样,因此被称为“洋葱圈模型”。

三、如何使用中间件

在express中,使用中间件需要使用use方法,该方法接收一个函数作为参数,该函数内部可以对请求和响应做相应的处理。

例如,下面是添加一个简单的日志中间件的示例:

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

app.use((req, res, next) => {
  console.log(`请求的方式为:${req.method}`);
  next();
});

app.get('/', (req, res) => {
  res.send('Hello, World!');
});

app.listen(3000, () => {
  console.log('服务已启动,监听端口:3000');
});

在上面的代码中,我们通过app.use方法添加了一个中间件,该中间件对请求进行了简单的日志记录,并调用了next方法,将请求传递给下一个中间件或路由处理函数。

四、中间件的执行顺序

在express中,中间件的执行顺序非常重要,因为它会影响到整个请求处理的流程和结果。下面是中间件的执行顺序:

  • 当请求发送到express服务器时,首先执行最外层的中间件。
  • 中间件在执行过程中,可以选择将请求处理结果返回给客户端,或将请求转发给下一个中间件/路由处理函数。
  • 如果在中间件中调用了next方法,请求将进入下一个匹配到的中间件/路由处理函数。
  • 如果没有匹配到任何路由,将会返回404错误。
  • 如果出现错误,将会进入错误处理中间件(即定义了四个参数的回调函数)。

需要注意的是,在中间件的执行过程中,如果遇到错误或中途结束请求,将会跳过后面所有的中间件和路由处理函数,直接进入错误处理中间件。

五、示例说明

示例一:使用中间件实现权限验证

在我们的应用程序中,很多路由需要验证用户的身份才能访问。这时我们就可以使用中间件来实现权限验证。

下面是一个基于cookie的简单用户验证中间件:

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

// 权限验证中间件
const authMiddleware = (req, res, next) => {
  const { cookies } = req;

  if (cookies && cookies.authUser) { // cookie中存在authUser字段,表示用户已登录
    next(); // 请求向下传递
  } else {
    res.status(403).send('未授权,无法访问');
  }
}

app.use(authMiddleware); // 应用该中间件

app.get('/', (req, res) => {
  res.send('Hello, World!');
});

app.get('/dashboard', (req, res) => {
  res.send('欢迎来到仪表盘!');
});

app.listen(3000, () => {
  console.log('服务已启动,监听端口:3000');
});

在上述示例中,我们定义了一个名为authMiddleware的中间件,该中间件会检查请求中的cookie是否包含名为authUser的字段,只有cookie中存在该字段表示用户已经登录,则允许请求继续向下传递;否则,返回状态码为403的错误响应。

其中,app.use(authMiddleware)方法用于应用该中间件,表示对所有路由生效。

示例二:使用多个中间件实现请求/响应日志记录和gzip压缩

在我们的应用程序中,很多路由需要实现请求/响应的日志记录和开启gzip压缩。这时我们就可以使用多个中间件来实现这些功能。

下面是一个添加多个中间件的示例:

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

app.use(compression()); // 开启gzip压缩
app.use(morgan('combined')); // 记录请求日志

app.get('/', (req, res) => {
  res.send('Hello, World!');
});

app.listen(3000, () => {
  console.log('服务已启动,监听端口:3000');
});

在上述示例中,我们使用了compressionmorgan两个中间件,compression用于开启gzip压缩,morgan用于记录请求日志。其中,app.use方法用于应用中间件,表示对所有路由生效。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:从零学习node.js之express入门(六) - Python技术站

(0)
上一篇 2023年6月8日
下一篇 2023年6月8日

相关文章

  • HTML5自定义mp3播放器源码

    HTML5自定义mp3播放器是一个相对简单的前端项目,通过HTML5的标签和JavaScript,可以实现一个简单的自定义mp3播放器。下面是一个完整的攻略,包含如何编写HTML和JavaScript代码以及如何实现功能。 编写HTML代码 首先需要在HTML中编写一个基础的HTML文档,然后添加一个标签来实现音频播放。下面是一个简单的HTML代码示例: &…

    node js 2023年6月8日
    00
  • Node.js 中如何收集和解析命令行参数

    收集和解析命令行参数是 Node.js 进程中一个常见且重要的任务。Node.js 提供了内置的 process 对象,该对象包含了一个 argv 属性,用于获取用户在命令行中传递的参数列表。本篇攻略将详细介绍 Node.js 中如何收集和解析命令行参数。 获取命令行参数 Node.js 中可以使用 process.argv 属性获取命令行的参数。proce…

    node js 2023年6月8日
    00
  • 三种Webpack打包方式(小结)

    三种Webpack打包方式(小结) Webpack是一款可以将各种资源打包成静态文件的前端构建工具。Webpack提供了三种打包方式,分别是简单模式、多入口模式和代码分离模式。下面我们来详细讲解每一种方式及其使用场景。 简单模式 简单模式是Webpack处理单页应用程序时默认的打包方式。简单模式只需要一个入口文件和一个输出文件即可完成打包。这种方式适用于简单…

    node js 2023年6月8日
    00
  • mongoose更新对象的两种方法示例比较

    Mongoose是一个为了在Node.js中与MongoDB进行交互而设计的对象模型工具。在实际应用中,我们常常需要更新对象来满足业务需求。本文将介绍Mongoose中更新对象的两种方法并进行比较。 一、Mongoose更新对象的两种方法 Mongoose更新对象的两种方法分别是:Model.updateOne()和Model.findByIdAndUpda…

    node js 2023年6月8日
    00
  • Node.js开发静态资源服务器

    Node.js是一种基于Chrome V8引擎的JavaScript运行环境,可以用于开发高效的网络应用程序。在使用Node.js进行Web开发时,经常需要开发一个静态资源服务器来提供网站所需的静态文件(如HTML、CSS、JavaScript、图片等),以加快网站的访问速度和提高用户体验。 下面是基于Node.js开发静态资源服务器的完整攻略: 步骤一:搭…

    node js 2023年6月8日
    00
  • debian5安装node.js步骤图解

    下面是“debian5安装node.js步骤图解”的完整攻略,过程中附带两条示例说明: 1. 安装必要的依赖 在安装 Node.js 前,需要先安装必要的依赖:build-essential 和 libssl-dev。可以使用以下命令安装: sudo apt-get update sudo apt-get install -y build-essential…

    node js 2023年6月8日
    00
  • nodejs 使用http进行post或get请求的实例(携带cookie)

    下面我将为你讲解“nodejs 使用http进行post或get请求的实例(携带cookie)”的完整攻略。 一、前置知识 在了解如何使用nodejs进行post或get请求之前,你需要了解以下前置知识: http协议和http请求 url模块:用于解析和格式化URL querystring模块:用于解析和格式化查询字符串 http模块:用于创建客户端和服务…

    node js 2023年6月8日
    00
  • Nodejs + Websocket 指定发送及群聊的实现

    下面是针对“Nodejs + WebSocket 指定发送及群聊的实现”的完整攻略: 1. 基本概念 什么是 WebSocket? WebSocket 是一种 HTML5 中的新技术,它允许客户端和服务器之间建立一个双向的、基于浏览器的实时通信通道。通俗地说,WebSocket 就是可以在浏览器和服务器之间实现双向通信的技术。 什么是 Node.js? No…

    node js 2023年6月8日
    00
合作推广
合作推广
分享本页
返回顶部