从零学习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日

相关文章

  • node.js中使用socket.io的方法

    使用Socket.IO在Node.js中建立实时双向通信的方法如下: 安装 在终端中使用npm安装socket.io模块: npm install socket.io –save 服务端代码 在服务端的代码中,需要新建一个Socket.IO实例,然后监听客户端与服务端之间的通信。以下是一个使用Express框架的例子。 // 引入Express框架和Soc…

    node js 2023年6月8日
    00
  • 在阿里云 (aliyun) 服务器上搭建Ruby On Rails环境

    下面给出阿里云服务器上搭建Ruby On Rails环境的完整攻略: 1. 登录阿里云服务器 首先,开启控制台登录阿里云服务器。 2. 安装必要依赖 在终端中执行以下命令: sudo apt-get update sudo apt-get install git-core curl zlib1g-dev build-essential libssl-dev …

    node js 2023年6月9日
    00
  • 在Centos部署nodejs的步骤

    下面是在CentOS部署Node.js的步骤攻略: 安装Node.js 使用yum安装Node.js: sudo yum install -y nodejs 安装完成后,可以使用以下命令验证Node.js版本: node -v 安装npm 在Node.js中,npm是一个包管理器,用于安装和管理Node.js模块。可以通过以下命令安装npm: sudo yu…

    node js 2023年6月8日
    00
  • dtree 网页树状菜单及传递对象集合到js内,动态生成节点

    下面我将为您详细介绍如何实现 “dtree 网页树状菜单及传递对象集合到js内,动态生成节点” 的攻略。 准备工作 为了实现这个功能,我们需要准备以下工作:- 安装 dtree 插件- 准备要展示的数据(例如:从后端获取到的树状结构数据) 使用 dtree 插件实现树状菜单 在 HTML 页面中引入 dtree 文件 <script src=&quot…

    node js 2023年6月8日
    00
  • TypeScript转javaScript的方法示例

    下面是“TypeScript转javaScript的方法示例”的完整攻略: 1. 确保TypeScript安装完成 如果尚未安装TypeScript,请先在命令行中输入以下命令进行安装: npm install -g typescript 2. 创建TypeScript文件 在本地项目中创建一个TypeScript文件,并编写一些TypeScript代码。例…

    node js 2023年6月8日
    00
  • JS循环中正确使用async、await的姿势分享

    JS循环中正确使用async、await的姿势分享: 在循环中正确使用async和await关键字,需要注意以下几点: 必须将循环封装在一个async函数中,这样才能使用await关键字等待异步操作的完成。 循环体中,需使用await等待当前异步处理结束才能再进行下一步操作。 如果循环的异步处理不需要保持顺序执行,则可以使用Promise.all()等待所有…

    node js 2023年6月8日
    00
  • 利用PM2部署node.js项目的方法教程

    利用PM2部署node.js项目的方法教程 简介 PM2是一个Node.js进程管理器,可用于管理和部署Node.js项目。它可以在多个进程之间负载平衡,自动重启崩溃的进程并进行日志记录。在这篇攻略中,我们将介绍如何使用PM2来部署和管理Node.js项目。 安装 PM2是通过npm安装的,因此您需要在本地安装Node.js和npm。安装Node.js和np…

    node js 2023年6月8日
    00
  • node中使用es6/7/8(支持性与性能)

    在Node中使用ES6/7/8语法需要经过一些配置和使用相关的工具,下面是具体的步骤: 1. 安装工具 安装babel和babel-cli,可用以下命令: $ npm install –save-dev babel babel-cli $ npm install –save-dev babel-preset-env 其中,babel-preset-env…

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