当前位置: 首页 > news >正文

Express笔记

Express 是基于 Node.js 平台,快速、开放、极简的 Web 开发框架。本质是一个 npm 上的三方包,提供了快速创建 Web 服务器的便捷方法。

下载:npm i -S express

创建web服务:

1.导入需要使用的express包

const express = require('express')

2.创建web实例

const app = express()

3.定义允许访问的地址(定义路由)

// 监听 get请求(req 请求对象,res 响应对象)

app.get('请求URI',(req,res)=>{

        // 向客户端响应数据

        res.send({id:1,name:'张三'})

})

// 监听POST请求

app.post('请求URI',(req,res)=>{})

4.启动服务(监听端口)

app.listen(8080, () => {

    console.log("server is running at http://127.0.0.1:8080");

});

常见api

 app.all('/',(req,res) => { // 业务代码,只要路径匹配上即可 })  // 这种方式尽量不用

app.use()方法一般写在具体的路由监听之前

获取query字符串(获取get传值的参数)

通过 req.query 对象,可以访问到客户端通过查询字符串的形式发送到服务器的参数

动态参数传递params

Express支持类似于Vue中`动态路由`的形式传递参数,参数通过 req.params 对象访问

// 必须的路由参数(不传就匹配不上,返回404错误)

app.get('/:id',(req,res)=>{

        console.log(req.params.id)

})

// 可选的路由参数(传递与否都不会报错)

app.get('/:id?',(req,res)=>{

        console.log(req.params.id)

})

静态资源托管express.static()

express提供了一个express.static()方法,可以非常方便地创建一个静态web资源服务器

app.use(express.static('public'))

// app.use()表示使用(中间件)

// 现在可以访问public目录下所有的文件 

// 如public/aa.jpg文件,则可以通过 : http://xxxx/images/aa.jpg

express还支持给静态资源文件创建一个虚拟文件前缀(实际上文件系统中并不存在,可以迷惑别人,一定程度上阻止别人猜测我们服务器的目录结构,帮助我们更好的组织和管理静态资源),可以使用express.static函数指定一个虚拟的静态目录:

app.use('/static', express.static('public'))  //前缀前面的“/”必须要加,否则就错。【404】

现在可以使用 `/static` 作为前缀来加载 `public` 文件夹下的文件了:http://localhost:3000/static/images/kitten.jpg

路由:客户端发起的请求(地址)与服务器端处理方法(函数)之间的映射关系

express中的路由分3部份组成:请求类型、请求地址、对应的处理函数

当一个客户端请求到达服务端之后,先经过路由规则匹配,只有匹配成功之后,才会调用对应的处理函数。在匹配时,会按照路由的顺序进行匹配,如果请求类型和请求的 URL 同时匹配成功,则 Express 会将这次请求,转交给对应的函数进行处理。

app.<get/post/put/delete/use>(uri,(req,res)=>{})

// use方法并不是请求类型方法,但是它放的位置与请求方法一致

路由模块化

将原本写在一个文件中的路由规则,拆分成若干个路由文件(一个js文件就是一个模块)

核心思想:能拆就拆(拆到不能拆为止,解耦,高内聚,低耦合)

在开发项目时,如果将所有的路由规则都挂载到入口文件中,程序编写和维护都变得更加困难。所以express为了路由的模块化管理功能,通过express.Router()方法创建路由模块化处理程序,可以将不同业务需求分开到不同的模块中,从而便于代码的维护和项目扩展。

1.创建独立js空白文件(最后是统一放在一个目录下,一般是router目录),该文件即路由模块化文件,在js文件中使用express.Router()方法创建路由模块对象

使用路由对象完成路由规则的对应的业务编写, 使用模块化导出module.exports = router

-在主入口文件中能够使用app.use方法来注册定义的路由模块,支持前缀的使用,app.use("前缀",路由模块化路由)

中间件

中间件(middleware)可以理解为业务流程的中间处理环节,请求之后,响应之前,由于其在两者之间,所以被称之为中间件,中间件可以有多个,也可以有一个,也可以没有,中间件的作用是处理数据

1.内置中间件:

  • express.static() 静态资源管理的中间件
  • express.json()   接收json格式提交的数据,兼容性问题:express >= 4.16.0

     app.use(express.json())其在接收完数据后,会将数据的对象形式挂载到req请求对象的body属性上

  • express.urlencoded()  处理post表单数据,兼容性问题:express >= 4.16.0

     app.use(express.urlencoded({extended: false}))

     在接收完数据后,会将数据的对象形式挂载到req请求对象的body属性上

      所有中间件处理数据都是挂在req.body上

2.第三方中间件,例如body-parser (解析post数据的)此中间件可以很方便帮助我们获取到post提交过来的数据,可通过npm进行安装第三方中间件并配置

3.自定义中间件:开发者自己编写的,本质就是一个function:

function mfn(req,res,next){

        //. 自己需要定义的逻辑流程

        next()  // 中间件最后一定要执行此函数,否则程序无法向下执行下去

}

http://www.xdnf.cn/news/622801.html

相关文章:

  • 塔能节能平板灯:点亮苏州某零售工厂节能之路
  • Oracle表索引变为不可用状态了怎么办
  • UniApp === H5实现主题切换
  • 【检索增强生成(RAG)全解析】从理论到工业级实践
  • commonmark.js 源码阅读(二) - Inline Parser
  • leetcode 两两交换链表中的节点 java
  • 【R语言科研绘图】
  • 讯飞AI相关sdk集成springboot
  • Matlab实战训练项目推荐
  • LangGraph-agent-天气助手
  • 自然语言处理核心技术:词向量(Word Embedding)解析
  • 【读代码】BAGEL:统一多模态理解与生成的模型
  • 服务器硬盘虚拟卷的处理
  • 如何合法使用代理IP?
  • HTTP协议初认识、速了解
  • 奇好 PDF安全加密 + 自由拆分合并批量处理 OCR 识别
  • 记录python在excel中添加一列新的列
  • 【系统设计】2WTPS生产级数据处理系统设计Review
  • 大数据如何让智能物流和仓储管理更高效?从预测到自动调度
  • 【AI实战】从“苦AI”到“爽AI”:Magentic-UI 把“人类-多智能体协作”玩明白了!
  • 超详细网络介绍(超全)
  • YOLOv8损失函数代码详解(示例展示数据变换过程)
  • 如何对轨迹进行减速并保证在原来的轨迹上面
  • Python应用字符串格式化初解
  • [CSS3]Flex布局
  • C++中IO类(iostream、fstream和sstream)知识详解和应用
  • 负载均衡笔记
  • webpack的构建流程
  • 持续集成和部署
  • 每日Prompt:梦回大唐