Express

本文详细介绍了Express.js的基本使用,包括app.use()函数的作用、静态文件托管、路由设置、全局和局部中间件的区别,以及CORS跨域资源共享的概念。还涵盖了错误级别中间件和内置中间件的使用,如解析请求体数据的方法。
摘要由CSDN通过智能技术生成

1.Express简

app.use() 函数的作用,就是来注册全局中间件

1Express简介

http内置模块使用起来比较复杂,开发效率低,Express是基于http模块的进一步封装

2 基本使用

①监听GET请求

在这里插入图片描述

②POST请求

在这里插入图片描述

③ 获取URL的查询参数

在这里插入图片描述

④ 获取URL中的动态参数

在这里插入图片描述

3.静态托管

express.static()

在这里插入图片描述

const express = require('express')
const app = express()
//托管clock文件夹,使用express.static()方法
app.use(express.static('./clock'))

app.listen(80, () => {
    console.log('express server running at http://127.0.0.1')
})
2. 挂载路径前缀

在这里插入图片描述
这样加上挂载前缀后,访问都需加上该前缀/publick

2.Express路由

3.Express中间件

  • 多个中间件,按顺序依次执行

路由处理函数:app.on( ‘/’ , (req,res)=>{ })
中间件函数:app.on( ‘/’ , (req,res,next)=>{next () })

2. 全局生效的中间件

客户端发起的任何请求,到服务器后,都会先触发中间件函数。
通过 app.use(中间件函数) 定义

// 定义一个最简单的中间件函数
 const mw = function (req, res, next) {
  console.log('这是最简单的中间件函数')
// 把流转关系,转交给下一个中间件或路由
  next()
// }

// 将 mw 注册为全局生效的中间件
app.use(mw)
//定义路由
app.get('/', (req, res) => {
  console.log('this /')
  res.send('Home page')
})
app.listen(80, () => {
  console.log('127.0.0.1')
})
3. 中间件的作用

共享同一份req 和 res ,在上游中间件中 定义req/res属性或方法,下游可以使用

共享,上游定义,下游使用

app.use((req, res, next) => {
  // 获取到请求到达服务器的时间
  const time = new Date()
  // 为 req 对象,挂载自定义属性,从而把时间共享给后面的所有路由
  req.startTime = time
  next()
})

app.get('/', (req, res) => {
  res.send('Home page.' + req.startTime)
})
//User page.Sat Nov 18 2023 10:41:36 GMT+0800 (中国标准时间)
4. 局部生效的中间件

不适用app.use()定义的中间件
下面代码,中间价函数,只在请求 http://127.0.0.1/时生效

// 1. 定义中间件函数
const mw1 = (req, res, next) => {
  console.log('调用了局部生效的中间件')
  next()
}
//2.创建路由
app.get('/', mw1, (req, res) => {
  res.send('Home page');
})
app.get('/user', (req, res) => {
  res.send('User page');
})

中间件分类

1.错误级别中间件

专门捕获整个项目的异常错误,防止项目异常崩溃

用来捕获错误,一定要写在所有路由之后

//1.定义路由
app.get('/', (req, res) => {
  throw new Error('服务器错误!')
  res.send('Home page')
})

// 2.定义错误中间件,捕获错误
app.use((err, req, res, next) => {
  console.log(err.message)
  res.send(err.message)
})

2. 内置中间件

在请求段配置中间件
req.body:body请求体参数

const express = require('express')
// 创建 express 的服务器实例
const app = express()
// 注意:除了错误级别的中间件,其他的中间件,必须在路由之前进行配置
// 通过 express.json() 这个中间件,解析表单中的 JSON 格式的数据
app.use(express.json())

app.post('/user', (req, res) => {
  // 在服务器,可以使用 req.body 这个属性,来接收客户端发送过来的请求体数据
  // 默认情况下,如果不配置解析表单数据的中间件,则 req.body 默认等于 undefined
  console.log(req.body)
  res.send('ok')
})

// 调用 app.listen 方法,指定端口号并启动web服务器
app.listen(80, function () {
  console.log('Express server running at http://127.0.0.1')
})
3.解析表单中间件

在这里插入图片描述
在这里插入图片描述

①内置的解析方式

extended:false的意思是:不使用第三方的解析方式,只使用自身的解析方式;如果是true就使用第三方解析方式

const express = require('express')
const app = express()
//通过express.urlencoded()这个中间件,解析表单中的 url-encoded 格式的数据
app.use(express.urlencoded({ extended: false }))

//创建路由
app.post('/book', (req, res) => {
    console.log(req.body)
    res.send('ok')
})

//启动web服务器
app.listen(80, () => {
    console.log('127.0.0.1');
})
②第三方的解析方式
  1. 运行 npm i body-parser 安装中间件
  2. 使用require导入中间件 body-parser
  3. 调用 app.use() 注册并使用中间件
//☆ 第三方的解析body-parser☆
const parser = require('body-parser')
app.use(parser.urlencoded({ extended: false }))
4.监听req的data事件
//定义中间件
// 这是解析表单数据的中间件
app.use((req, res, next) => {
  // 定义中间件具体的业务逻辑
  // 1. 定义一个 str 字符串,专门用来存储客户端发送过来的请求体数据
  let str = ''
  // 2. 监听 req 的 data 事件
  req.on('data', (chunk) => {
    str += chunk//str就得到完整的数据
  }) 
})  
4.监听req的end事件
//定义中间件
app.use((req,res,next)=>{
    let str=''
    //监听req的data事件(传数据)
    req.on('data',(chunk)=>{
        str+=chunk
    })
    req.on('end',()=>{
        console.log(str)
        //把得到的请求体数据解析成对象格式
        const body = qs.parse(str)
       	console.log(body) //得到对象格式的数据
    })
})
4.将解析的数据对象挂在为req.body

将解析出的自定义属性命名为req.body,供下游使用

//定义中间件
app.use((req,res,next)=>{
    let str=''
    //监听req的data事件(传数据)
    req.on('data',(chunk)=>{
        str+=chunk
    })
    req.on('end',()=>{
        console.log(str)
        //把得到的请求体数据解析成对象格式
        const body = qs.parse(str)
        req.body = body //挂载为req.body
        next()  //一定要调用next()函数,执行后续的业务逻辑
    })
})
app.post('/book',(req,res)=>{
    res.send(req.body)
})

效果:
在这里插入图片描述

4.CORS 跨域资源共享

1.cors

它是由一系列HTTP响应头组成,这些响应头决定浏览器是否阻止前端js代码跨域获取资源

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值