Web 开发框架 — Express 精讲(安装使用、静态托管、路由处理、中间件的使用)(2)

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: Web 开发框架 — Express 精讲(安装使用、静态托管、路由处理、中间件的使用)(2)

五、Express 中间件

       中间件是一个函数,它可以访问请求对象(request objeck(req))、响应对象(response object(res)) ,和 Web 应用中处于请求 · 响应循环流程中的中间件;


       中间件还有第三个参数 next,用于将此请求传递到下一环节;从本质上来说,一个 Express 应用就是在调用各种中间件。中间件分为以下几种:


应用级中间件(app.use)

路由级中间件(app.get/post...)

错误处理中间件

内置中间件(如我们之前使用的静态资源托管 static 就是内置中间件)

第三方中间件

1. 应用级中间件

       应用级中间件绑定到 app对象 使用 app.use() 和 app.METHOD();


       新建 1.js 文件进行演示,通过三个中间件来实现访问 /user 路径,记录访问时间、访问日志以及访问次数。


// study_Express/1.js
const express = require('express') //require函数引入express包
const app = express() //调用函数
let total = 0; //访问量
//应用级中间件
app.use('/user', (req, res, next) => { //第一个中间件
  console.log('访问时间:' + Date.now()) //记录访问时间
  next() //进入下一个中间件,不使用next则不会执行下面的中间件
})
app.use('/user', (req, res, next) => { //第二个中间件
  console.log('日志:×××访问了/user') //记录访问日志
  next()
})
app.use('/user', (req, res) => { //第三个中间件
  total++; //访问次数增加
  console.log('当前访问量:' + total)
  res.send('返回结果')
})
app.listen(3000, () => { //创建监听
  console.log('中间件服务器启动成功...')
})

启动服务后访问 /user 路径;

image.png



此时后台会打印出相关信息,每刷新一次,次数加一;

image.png



2. 路由级中间件

       新建文件 2.js 进行演示,使用两个中间件打印出1、2。


// study_Express/2.js
const express = require('express') //require函数引入express包
const app = express() //调用函数
//路由级中间件
app.get('/luyou', (req, res, next) => {
  console.log(1)
  next()
})
app.get('/luyou', (req, res) => {
  console.log(2)
})
app.listen(3000, () => { //创建监听
  console.log('路由级中间件服务器启动成功...')
})

启动服务后访问 /luyou 路径;

image.png



后台打印出结果;

image.png



此外,路由级中间件中调用 next 时,可以加一个 route 参数 next('route'),意为跳转至下一个路由;


注意区分:


       next();跳转至下一个中间件。


       next('route');跳转至下一个路由,所谓下一个路由就是通过 get、post  或者其他方式所绑定的路由。


如下面这种写法:


const express = require('express') //require函数引入express包
const app = express() //调用函数
//路由级中间件
app.get('/luyou', (req, res, next) => { //第一个中间件 第一个路由
  console.log(1)
  next('route') //跳转至下一个路由
}, (req, res) => { //第二个中间件
  console.log(2)
})
app.get('/luyou', (req, res) => { //第三个中间件 第二个路由
  console.log(3);
  res.send('路由级中间件返回结果')
})
app.listen(3000, () => { //创建监听
  console.log('路由级中间件服务器启动成功...')
})

第一个中间件和第二个中间件进行了嵌套,只使用了一个路由,在第一个中间件中使用了 next('route'); 直接跳到了下一路由,所以第二个中间件的结果 2 就不会打印了,如下:


image.png




3. 错误处理中间件

       错误处理中间件需要4个参数,必须提供四个参数以将其标识为错误处理中间件函数。即使不需要使用 next 对象,也必须指定它。否则,该 next 对象将被解释为常规中间件并且无法处理错误。格式如下:


app.use(function (err, req, res, next) {
  console.error(err.stack)
  res.status(500).send('Something broke!')
})

4. 第三方中间件 —— body-parser

       第三方中间件有很多,在这里我们重点演示参数传递 body-parser,其余第三方中间件用法相同;

image.png



首先 npm 安装 body-parser,终端中中使用命令 npm install body-parser --save;

image.png



安装成功后会在 package.json 文件中显示;

image.png



新建文件 3.js 进行演示,实现简易的登录表单验证功能;


// study_Express/3.js
const express = require('express') //require函数引入express包
const app = express() //调用函数
const bodyParser = require('body-parser') //引入body-parser
//挂载(启用)内置中间件static,托管静态资源
app.use(express.static('public'))
//挂载参数处理中间件(此处解析post表单提交的数据)
app.use(bodyParser.urlencoded({
  extended: false
}))
//处理get提交的数据
// app.get('/login', (req, res) => {
//   let data = req.query;
//   console.log(data);
//   res.send('get提交时的数据')
// })
//处理post提交的数据
app.post('/login', (req, res) => {
  let data = req.body;
  if (data.username == '前端小马' && data.password == '123456') {
    res.send('登录成功!')
  } else {
    res.send('用户名或密码错误!')
  }
})
app.listen(3000, () => {
  console.log('第三方中间件服务启动...')
})

为了展示效果,我们在目录 public 下新建一个 html 文件来制作表单,并托管它;

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>表单</title>
  <style></style>
</head>
<body>
  <form action="http://localhost:3000/login" method="post">
    用户:<input type="text" name="username"><br>
    密码:<input type="password" name="password"><br>
    <input type="submit" value="提交">
  </form>
</body>
</html>

启动服务后访问 /login.html,可以正常验证:

image.png

相关文章
|
2天前
|
设计模式 开发框架 数据库
Python Web开发主要常用的框架
【5月更文挑战第12天】Python Web开发框架包括Django、Flask、Tornado和Pyramid。Django适用于复杂应用,提供ORM、模板引擎等全套功能;Flask轻量级,易于扩展,适合小型至中型项目;Tornado擅长处理高并发,支持异步和WebSockets;Pyramid灵活强大,可适配多种数据库和模板引擎,适用于各种规模项目。选择框架需依据项目需求和技术栈。
119 2
|
2天前
|
JavaScript 前端开发 数据可视化
Svelte Web 框架介绍
Svelte Web 框架介绍
6 0
|
2天前
|
前端开发 Java Spring
Java Web ——MVC基础框架讲解及代码演示(下)
Java Web ——MVC基础框架讲解及代码演示
12 1
|
2天前
|
设计模式 前端开发 网络协议
Java Web ——MVC基础框架讲解及代码演示(上)
Java Web ——MVC基础框架讲解及代码演示
6 0
|
2天前
|
机器学习/深度学习 JSON 编译器
C++ 资源大全:标准库、Web框架、人工智能等 | 最全整理
C++ 资源列表,内容包括: 标准库、Web应用框架、人工智能、数据库、图片处理、机器学习、日志、代码分析等
25 1
|
2天前
|
Go
golang学习3,golang 项目中配置gin的web框架
golang学习3,golang 项目中配置gin的web框架
|
2天前
|
中间件 Go API
【Go 语言专栏】Go 语言中的 Web 框架比较与选择
【4月更文挑战第30天】本文对比了Go语言中的四个常见Web框架:功能全面的Beego、轻量级高性能的Gin、简洁高效的Echo,以及各自的性能、功能特性、社区支持。选择框架时需考虑项目需求、性能要求、团队经验和社区生态。开发者应根据具体情况进行权衡,以找到最适合的框架。
|
2天前
|
开发框架 JavaScript 中间件
深入探索Node.js的Express框架:使用与中间件详解
【4月更文挑战第30天】本文深入探讨了Node.js的Express框架,介绍了其作为Web开发的强大工具,主要聚焦于基本使用和中间件。Express是基于Node.js的Web应用框架,用于构建高效的应用和API。文章详细讲解了如何安装Express,创建简单应用,以及中间件的工作原理和应用,包括中间件的顺序、错误处理和挂载位置。此外,还提到了使用第三方中间件扩展功能。理解Express基础和中间件对于开发高质量Web应用至关重要。
|
2天前
|
机器学习/深度学习 前端开发 数据可视化
数据分析web可视化神器---streamlit框架,无需懂前端也能搭建出精美的web网站页面
数据分析web可视化神器---streamlit框架,无需懂前端也能搭建出精美的web网站页面
|
2天前
|
开发框架 前端开发 JavaScript
学会Web UI框架--Bootstrap,快速搭建出漂亮的前端界面
学会Web UI框架--Bootstrap,快速搭建出漂亮的前端界面