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

让我来详细讲解一下“从零学习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日

相关文章

  • JS中队列和双端队列实现及应用详解

    JS中队列和双端队列实现及应用详解 什么是队列? 队列是指一种线性数据结构,它按照先进先出(FIFO)的原则进行排序。队列只允许在后端(称为tail)进行插入操作,在前端(称为head)进行删除操作。例如,当你在一家银行排队等待服务时,由于先来的人先获得服务的原则,所以你必须在队列中等待,直到你到达前面。当有人从银行窗口出来时,他们排在你的前面的所有人都必须…

    node js 2023年6月8日
    00
  • Nodejs学习笔记之NET模块

    首先我要给大家介绍的是Node.js中的NET模块,它是一个用于创建TCP服务器和客户端的核心模块。我们可以使用该模块创建各种TCP连接,并进一步使用它来实现各种网络应用,如聊天室、游戏等等。 一、创建TCP服务器 使用NET模块,我们可以很容易地创建一个TCP服务器。以下是一个简单的示例: const net = require(‘net’); const…

    node js 2023年6月8日
    00
  • 详解AngularJS脏检查机制及$timeout的妙用

    详解AngularJS脏检查机制及$timeout的妙用 AngularJS脏检查机制 AngularJS是一款前端JavaScript框架,其最重要的特性之一是脏检查机制,也就是$digest机制。$digest机制可以帮助我们实时监测$scope对象中数据的变化并进行更新。当调用$digest()方法时,AngularJS会检查当前页面上所有的$scop…

    node js 2023年6月8日
    00
  • Node.js利用console输出日志文件的方法示例

    当我们在开发Node.js应用时,常常需要在控制台中输出日志信息,以便于调试应用程序。在Node.js中,可以使用console对象来输出日志文件。下面是Node.js利用console输出日志文件的方法示例攻略。 1. console.log输出日志信息 使用console.log函数可以很方便地在控制台中输出日志信息,该函数的使用方式如下所示: cons…

    node js 2023年6月8日
    00
  • 在Linux服务器上部署vue项目

    部署vue项目到Linux服务器上主要需要完成以下几个步骤: 在本地使用npm等工具完成vue项目构建 将构建好的项目文件上传至Linux服务器 在Linux服务器上安装Nginx等Web服务器,并配置Web服务器 将上传的项目文件部署到Web服务器上 启动Web服务器,访问部署在服务器上的vue项目 下面,我将详细讲解每个步骤的具体操作流程: 1. 在本地…

    node js 2023年6月8日
    00
  • 基于node的cli工具开发使用详解

    基于node的cli工具开发使用详解 什么是CLI工具 CLI指的是命令行界面,是与计算机进行交互的一种方式。CLI工具通常是指在命令行界面下运行的程序,可以执行一些简单的任务,比如新建文件夹、复制文件等等。CLI工具具有操作简便、灵活高效等特点,可以方便程序员进行开发工作。 CLI工具的开发流程 CLI工具的开发需要以下步骤: 安装nodejs环境和npm…

    node js 2023年6月8日
    00
  • nodejs实现遍历文件夹并统计文件大小

    要实现遍历文件夹并统计文件大小,我们需要使用nodejs提供的fs模块来操作文件系统,并使用递归函数遍历文件夹。以下是具体步骤: 步骤1 – 引入模块 首先需要引入fs模块,它可以方便地对文件和文件夹进行操作。我们还需要引入path模块,它可以处理路径。 const fs = require(‘fs’); const path = require(‘path…

    node js 2023年6月8日
    00
  • 原生JavaScript实现remove()和recover()功能示例

    原生JavaScript实现remove()和recover()功能示例攻略 简介 在前端开发中经常会用到DOM元素的添加、删除等操作。对于删除元素,很多同学可能会使用jQuery等库来进行操作。但是在一些特殊情况下,例如项目不允许使用jQuery等库,或者需要优化代码性能等情况下,我们需要使用原生JavaScript实现remove()和recover()…

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