Express 是一个基于 node.js 的 Web应用开发框架。它提供了一组强大的特性,可以帮助开发人员快速构建高性能的 Web 应用和 API。
Express 的主要特性包括:
npm install [email protected]
const express = require("express")
const app = express()
app.get('/',(req,res)=>{ res.send('GET响应内容') })
app.post('/',(req,res)=>{ res.send('POST响应内容') })
app.listen(80,()=>{ console.log('服务已启动,服务器地址:http://localhost:80/') })
用于加载中间件,中间件是指在请求和响应对象之间运行的一些函数,用于处理 HTTP 请求并响应。
app.use((rqe,res,next)=>{
console.log('中间件函数运行了')
next();
})
// 跳过express的导入以及express的实例创建...
// 定义中间件函数
const hand = (req,res,next)=>{ .... }
// 使用中间件函数
app.get('/',hand,(req,res)=>{ .... })
// 以数组的形式,传入多个中间件函数
app.get('/',[hand,hand],(req,res)=>{ .... })
// 以不定数量传参,传入多个中间件函数
app.get('/',hand,hand,(req,res)=>{ .... })
错误处理函数,通常使用
app.use
进行注册,它的作用是捕获应用程序在处理过程中出现错误,防止进程崩溃。
Express 中间件是按顺序执行的,应该在所有其他中间件被定义后,再定义错误处理中间件。
Express 中的错误处理中间件 - 简书 (jianshu.com)
app.use((err,req,res,next)=>{ ... })
用于指定一个目录作为网站的静态资源,供用户访问
可以指定多个静态资源文件夹,优先级取决于指定的顺序
// 设置静态资源
app.use(express.static("clock"))
// 设置静态资源 ,指定前缀,组成地址:http://localhost/files/相关静态资源
app.use('/files', express.static('files'))
用于创建一个独立的路由处理器,每个路由处理器可以用于管理不同的路由。
通过 Router 对象,可以轻松将一个大型的应用程序拆分成多个小的模块。
----------- baseRouter.js -----------
const express = require("express")
const router= express.Router()
// 注册路由
router.get('/',(req,res)=>{ ... })
// 导出路由对象
module.exports = router
----------- app.js -----------
const express = require('express')
const app = express() //创建服务器
const baseRouter = require('./baseRouter.js') //导入路由模块
app.use(baseRouter) // 以使用中间件的方式,注册路由模块
app.listen(80,()=>{ ... })
用于处理 JSON 数据,JSON 数据会被自动解析并存放到
req.body
对象
app.use(express.json())
用于处理
x-www-form-urlencoded
数据,表单数据会被自动解析并存放到req.body
对象
app.use(express.urlencoded())
urlencoded
的 options.extend
设置为假时,默认使用 JavaScript 的原生解析 querystring 模块,它无法解析嵌套数据urlencoded
的 options.extend
设置为真或不设置时,默认使用的是第三方 qs 模块。用于接收
text/plain
的文本数据,存放在req.body
用于接收
buffer
的字节数据,存放在req.body
存放着当前请求地址的查询参数
地址:http://localhost/user?arg=test
console.log(req.query) // { arg: 'test' }
存放着当前请求地址的动态参数
定义动态路由
推荐配合动态路由使用 RESTful API架构
app.get('/user/:id',(req,res)=>{ console.log(req.params.id) })
假设访问 http://localhost/user/123456
,那么动态参数会存在一个 id,且值为 123456
console.log(req.params) // { id: '123456' }
console.log(req.params.id) // 123456
使用后允许接口被跨域访问
安装
npm install cors
使用
const cors = require("cors")
app.use(cors())
一个基于 Express 的 Session 中间件,会自动维护每个请求的会话状态
安装
npm install express-session
使用
const session = require("express-session")
app.use(session({
name:"会话名称",
secret:"加密密钥",
resave:false,// 固定写法,不需要强制保存
saveUninitialized:false,// 固定写法,不需要未初始化时强制保存
}))
express-session
中间件后,会在请求对象(req)上添加一个 session 属性,用于存储当前会话的状态req.session
可以在同一个用户的请求中, 管理这个用户的相关数据.一个基于 Express 的用于 JWT 鉴权的中间件,需要配合
jsonwebtoken
模块使用。
安装
npm install express-jwt jsonwebtoken
使用
const { expressjwt } = require("express-jwt")
const jwt = require("jsonwebtoken")
const secretKey = 'Test' // 加解密钥
// jwt 计算方式
jwt.sign(content,secretKey,{ expiresIn: '30d' }) // expiresIn 定义到期时间
// 注册鉴权中间件
app.use(expressjwt({
secret: secretKey, //设置密钥
algorithms: ['HS256'] //设置加密方式
}).unless({'path': "/login"}) //unless指定免验证的接口
)
// 测试路由
app.get("/profile", (req, res) => {
console.log(req.auth) // 旧版express-jwt存放在req.user,最新版迁移到了req.auth,更加语义化了。
res.send('通过验证')
})
用于校验表单数据的合法性 NPM文档
用于校验表单数据的合法性