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

Express基于Node.js基础知识【2】全面总结 推荐

最近在用基于node.js平台的web应用开发做项目,梳理了下关于Express框架的相关知识,方便自己以后查看,希望也能帮助证字啊学习express相关知识的同学,欢迎大家参考,有问题评论区留言,谢谢。

Node.js下载安装配置请参考:Node.js 下载安装配置 超详细-CSDN博客


目录

1.响应动态页面

1.安装ejs模板引擎

2.在express中使用ejs模板引擎

3.ejs的常用知识点

2.路由

3.Express中App级中间件

3.1 use中间件

3.2 METHOD()和all() 中间件

4.Router级中间件

4.1 Router级中间件use()

4.2 router中间件的应用 

5、Express内置中间件

6.第三方中间件

7.错误处理中间件


1.响应动态页面

1.安装ejs模板引擎
  1. 输入 npm install ejs 安装ejs
  2. 安装成功后可以看到 package.json文件 有对应的版本信息
D:\CODE\VSCODE\node\express\course> npm install ejs 

2.在express中使用ejs模板引擎

2.1使用默认文件渲染模板

在项目中新建views>user.ejs 文件,ejs文件和html类似,我们试图用变量id 即请求返回的数据展示到页面上。

我们在postman中测试一下,我们通过get/user请求 ,结果返回一个user.ejs页面。可以看到成功返回了。

2.2 配置模板动态渲染页面

如果模板目录不是views的话不设置会报错的。

把默认模板设置成对应的模板就可以了。

设置默认的模板后缀名 这样在渲染模板的时候就可以省略了。

设置指定后缀名文件,比如把文件格式设置成html文件。

3.ejs的常用知识点

ejs如何获取变量的值,遍历数组对象,展示html的信息。

引入其他页面文件 include

2.路由

router可以帮助我们处理有关路由相关的操作,我们就不需要在app上面处理了,可以按照业务需求分类来新建路由,更好的管理代码。代码更规范。

新建user路由文件 router> user.js 文件最后将路由router导出。

const express = require('express');
const router = express.Router()//用户登录
router.post('/login',(req,res) => {res.send('登录成功 userRouter')
})//用户注册
router.post('/register',(req,res) => {res.send('注册成功 userRouter')
})module.exports = router

index.js中部分代码

// userRouter是从router/user文件中引入
const userRouter = require('./router/user')app.use('/user',userRouter)

结果展示如下:

3.Express中App级中间件

中间件是什么?

中间件是express的核心。中间件是函数,是express调用的函数,调用时会被express传入三个参数,res req next。

3.1 use中间件
//1.use中间件
//使用app.use()方法将中间件提供给express调用
//use()该方法第一个参数默认是/ 可以省略
//use()可以匹配所有的HTTP 方法
//use()匹配路径的规则为:从头包含匹配
app.use((req,res,next) => {console.log('use1中间件')next()
})app.use('/',(req,res,next) => {console.log('use1中间件')//next()res.send('hello')
})//可以给同一个路径或者 同一个use()注册多个中间件函数
app.use('/',(req,res,next) => {console.log('use1中间件')//next()res.send('hello')},(req,res,next) => {console.log('use1中间件')//next()res.send('hello')}
)

3.2 METHOD()和all() 中间件
  1. METHOD()具体指:app.get() app.post() app.put() app.delete()等

  2. METHOD()方法会匹配对应的http方法,all()方法会匹配所有Http方法

  3. METHOD()或all()方法匹配路径的规则:相等匹配

  4. 可以给同一个路径注册多个中间件函数

  5. 可以在一个METHOD()或all() 方法中注册多个中间件函数

4.App中间件的应用

处理application/x-www-form-urlencoded数据

新建middleware文件夹> urlencoded.js文件

const querystring = require('node:querystring')
module.exports = () => {(req,res,next) => {if(req.header('Content-Type')!=='application/x-www-form-urlencoded'){return next()}const results = []req.on('data',chunk=>{results.push(chunk)})req.on('end',() => {const data = Buffer.concat(results).toString()req.body = querystring.parse(data)next()})}
}

index.js文件

const urlencoded = require('./middleware/urlencoded')
app.use(urlencoded())app.post('/user',(req,res)=>{console.log(req.body)
})

处理application/json数据

直接写在index.js文件中

index.js代码

//处理请求体中application/json数据
app.use((req,res,next) => {// console.log(req.header('Content-Type'))if(req.header('Content-Type')!=='application/json'){return next()}const results = []req.on('data',chunk=>{results.push(chunk)})req.on('end',() => {const data = Buffer.concat(results).toString()req.body = JSON.parse(data)next()})
})app.post('/user',(req,res)=>{console.log(req.body)
})

4.Router级中间件

4.1 Router级中间件use()
//router中间件 use
const router = express.Router()
router.use((req,res,next) => {console.log('输出中间件')next()
})
app.use('/',router)

router中的method()和all() 和 app中间件中的method() 类似。这里next(router)会跳到匹配的路由。

router.get('/',(req,res,next)=>{console.log('输出get')next('route')
})

4.2 router中间件的应用 

主要时两个文件index.js 和路由user.js 文件 

//index.js文件const userRouter = require('./router/user')
app.use('/user',userRouter)
// user.js文件
const express = require('express');
const router = express.Router()//用户注册
const validate = (req,res,next) => {//校验数据if(true) {console.log('数据校验通过')next()}else{//报错}
}const userMustNotExit = (req,res,next) => {if(true) {console.log('可以注册新用户')next()}else{//报错}
}const encryptPassword = (res,req,next) => {console.log('密码已加密')next()
}const register = (res,req,next) => {console.log('注册成功')res.send('注册成功')
}router.post('/register',validate,userMustNotExit,encryptPassword,register)
module.exports = router

5、Express内置中间件

  1. 处理请求体中application/x-www-form-urlencode格式数据
  2. 处理请求体中 application/json 格式的数据
  3. 提供静态资源

6.第三方中间件

第三方插件 cookie-parser 插件安装

npm install cookie-parser

具体用法如下图所示。

7.错误处理中间件

这里用前面router中间件 user.js文件,当用户未填写时,打印一个错误信息

可以看到当执行到next(new Error() ) 信息时,成功打印了错误信息。

到这里我们基于Node.js平台 Express框架 的基础知识就都在文档中了。


总共时两篇,关于Express框架入门的其他知识请参考:Express基于Node.js基础知识【1】全面总结 推荐收藏-CSDN博客

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • C++必修:STL之vector的了解与使用
  • JavaScript 变量声明var、let、const
  • 实验2-5-7 求阶乘序列前N项和【多看看函数】
  • 文件夹判断操作类 - C#小函数类推荐
  • 哈夫曼树及哈夫曼编码
  • 前端小白安装node、vue、Express、Electron及(Electron桌面端exe应用开发)
  • 干货满满,从零到一:编程小白如何在大学成为编程大神?
  • 滴滴官宣潘展乐为滴滴网约车“快”乐大使
  • AI产品经理的职责与能力:将AI技术转化为实际价值
  • 算法小白的进阶之路(力扣1~5)
  • 复制知乎文字内容
  • 本地VSCode连接远程linux环境服务器的docker
  • 【Linux】文件系统
  • TypeScript中 ?, ??, !, !! 的使用
  • 6小时之可笑中文乱码bug
  • [分享]iOS开发-关于在xcode中引用文件夹右边出现问号的解决办法
  • 【译】React性能工程(下) -- 深入研究React性能调试
  • Android组件 - 收藏集 - 掘金
  • JavaScript DOM 10 - 滚动
  • JSONP原理
  • js学习笔记
  • Python打包系统简单入门
  • sessionStorage和localStorage
  • Vue全家桶实现一个Web App
  • 从PHP迁移至Golang - 基础篇
  • 关于Android中设置闹钟的相对比较完善的解决方案
  • 力扣(LeetCode)965
  • 面试题:给你个id,去拿到name,多叉树遍历
  • 世界编程语言排行榜2008年06月(ActionScript 挺进20强)
  • 硬币翻转问题,区间操作
  • 优秀架构师必须掌握的架构思维
  • 在 Chrome DevTools 中调试 JavaScript 入门
  • 国内开源镜像站点
  • 回归生活:清理微信公众号
  • ​Distil-Whisper:比Whisper快6倍,体积小50%的语音识别模型
  • # C++之functional库用法整理
  • # 利刃出鞘_Tomcat 核心原理解析(八)-- Tomcat 集群
  • #NOIP 2014#day.2 T1 无限网络发射器选址
  • $LayoutParams cannot be cast to android.widget.RelativeLayout$LayoutParams
  • (1/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (9)目标检测_SSD的原理
  • (C语言)求出1,2,5三个数不同个数组合为100的组合个数
  • (solr系列:一)使用tomcat部署solr服务
  • (二十一)devops持续集成开发——使用jenkins的Docker Pipeline插件完成docker项目的pipeline流水线发布
  • (附源码)springboot工单管理系统 毕业设计 964158
  • (附源码)ssm本科教学合格评估管理系统 毕业设计 180916
  • (回溯) LeetCode 78. 子集
  • (亲测有效)解决windows11无法使用1500000波特率的问题
  • (实战)静默dbca安装创建数据库 --参数说明+举例
  • (四)进入MySQL 【事务】
  • (一) 初入MySQL 【认识和部署】
  • (一)Spring Cloud 直击微服务作用、架构应用、hystrix降级
  • (一)UDP基本编程步骤
  • (转)shell中括号的特殊用法 linux if多条件判断
  • (转)Sublime Text3配置Lua运行环境