最近在用基于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模板引擎
- 输入 npm install ejs 安装ejs
- 安装成功后可以看到 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() 中间件
-
METHOD()具体指:app.get() app.post() app.put() app.delete()等
-
METHOD()方法会匹配对应的http方法,all()方法会匹配所有Http方法
-
METHOD()或all()方法匹配路径的规则:相等匹配
-
可以给同一个路径注册多个中间件函数
-
可以在一个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内置中间件
- 处理请求体中application/x-www-form-urlencode格式数据
- 处理请求体中 application/json 格式的数据
- 提供静态资源
6.第三方中间件
第三方插件 cookie-parser 插件安装
npm install cookie-parser
具体用法如下图所示。
7.错误处理中间件
这里用前面router中间件 user.js文件,当用户未填写时,打印一个错误信息
可以看到当执行到next(new Error() ) 信息时,成功打印了错误信息。
到这里我们基于Node.js平台 Express框架 的基础知识就都在文档中了。
总共时两篇,关于Express框架入门的其他知识请参考:Express基于Node.js基础知识【1】全面总结 推荐收藏-CSDN博客