9. 内置中间件的使用
解析表单中 JSON、url-encoded 格式数据的方法
const express = require('express') const app = express() // 注意:除了错误级别的中间件,其他的中间件,必须在路由之前进行配置 // 通过 express.json() 这个中间件,解析表单中的 JSON 格式的数据 app.use(express.json()) // 通过 express.urlencoded() 这个中间件,来解析 表单中的 url-encoded 格式的数据 app.use(express.urlencoded({extended:false})) // 创建路由 app.post('/', (req, res) => { // 在服务器,可以使用 req.body 这个属性,来接收客户端发送过来的请求体数据 // 默认情况下,如果不配置解析表单数据的中间件,则 req.body 默认等于 undefined res.send("ok") }) app.listen(80, () => { console.log("express server running at http://127.0.0.1") })
10. body-parser中间件的使用
作用和内置中间件类似,的是用来解析 url-encoded 格式数据的方法,需要进行安装和引入
- 安装body-parser中间件的指令
npm install body-parser
- body-parser中间件的使用方法
const express = require('express') const app = express() // 导入中间件 body-parser const parser = require('body-parser') // 和内置中间件类似 app.use(parser.urlencoded({extended:false})) // app.use(express.urlencoded({extended:false})) // 创建路由 app.get('/user', (req, res) => { // 如果没有配置任何解析表单数据的中间件,则 req.body 默认等于 undefined console.log(req.body) res.send("ok") }) app.listen(80, () => { console.log("express server running at http://127.0.0.1") })
11. 自定义解析表单数据的中间件
自己定义一个解析 url-encoded 格式数据的方法
const express = require('express') const app = express() // 导入 node.js 内置的 querystring 模块 const qs = require('querystring') // 这是解析表单数据的中间件 app.use((req, res, next) => { // 定义中间件具体的业务逻辑 // 1. 定义一个 str 字符串,专门用来存储客户端发送过来的请求数据 let str = '' // 2. 监听 req 的 data 事件 req.on('data', (chunk) => { str += chunk }) // 3. 监听 req 的 end 事件 req.on('end', () => { // 在 str 中存放的是完整的请求体数据 // console.log(str) // TODO:把字符串格式的请求体数据,解析成对象格式 const body = qs.parse(str) req.body = body next() }) }) // 创建路由 app.post('/user', (req, res) => { res.send(req.body) }) app.listen(80, () => { console.log("express server running at http://127.0.0.1") })
12. 解决接口跨域问题
安装 cors 插件
npm install cors
引入 cors 插件,并把 cors 注册为全局中间件
一定要在路由之前,配置 cors 这个中间件,从而解决接口跨域的问题
const cors = require('cors') app.use(cors())
13. 使用 express 写接口
下面的案例引用了 express 中的所有方法
- 入口文件
// 导入 express const express = require('express') // 创建服务器实例 const app = express() // 配置解析表单数据的中间件 app.use(express.json()) app.use(express.urlencoded({extended:false})) // 必须在配置 cors 中间件之前,配置 JSONP 的接口 app.get('/api/jsonp', (req, res) => { // TODO:定义 JSONP 接口具体的实现过程 // 1. 得到函数的名称 const funcName = req.query.callback // 2. 定义要发送到客户端的数据对象 const data = {name:'zs',age:18} // 3. 拼接出一个函数的调用 const scriptStr = `${funcName}(${JSON.stringify(data)})` // 4. 把拼接的字符串,响应给客户端 res.send(scriptStr) }) //一定要在路由之前,配置 cors 这个中间件,从而解决接口跨域的问题 const cors = require('cors') app.use(cors()) // 导入路由模块 const router = require('./18-apiRouter') // 把路由模块,注册到 app 上 app.use('/api',router) // 启动服务器 app.listen(80, () => { console.log("express server running at http://127.0.0.1") })
- 接口文件
const express = require('express') const router = express.Router() // 在这里挂载对应的路由 router.get('/get', (req, res) => { // 通过 req.query 获取客户端通过查询字符串,发送到服务器的数据 const query = req.query // 调用 res.send() 方法,向客户端响应处理的结果 res.send({ status: 0, // 0 表示处理成功,1 表示处理失败 msg: "GET 请求成功!", // 状态的描述 data:query, // 需要响应给客户端的数据 }) }) // 定义 post 接口 router.post('/post', (req, res) => { // 通过 req.body 获取请求体中包含的 url-encoded 格式的数据 const body = req.body // 调用 res.send() 方法,向客户端响应处理的结果 res.send({ status: 0, // 0 表示处理成功,1 表示处理失败 msg: "POST 请求成功!", // 状态的描述 data:body, // 需要响应给客户端的数据 }) }) // 定义 DELETE 接口(预检请求) // 简单请求的特点:客户端和服务器之间只会发生一次请求 // 预检请求的特点:客户端和服务器之间只会发生二次请求,OPTION 预检请求之后,才会发起真正的请求 router.delete('/delete', (req, res) => { // 通过 req.body 获取请求体中包含的 url-encoded 格式的数据 // const body = req.body // 调用 res.send() 方法,向客户端响应处理的结果 res.send({ status: 0, // 0 表示处理成功,1 表示处理失败 msg: "DELETE 请求成功!", // 状态的描述 // data:body, // 需要响应给客户端的数据 }) }) module.exports = router
14. cors请求的分类
客户端在请求 CORS 接口时,根据请求方式和请求头的不同,可以将 CORS 的请求分为两大类,分别是:
- 简单请求
- 预检请求
简单请求:
同时满足以下两大条件的请求,就属于简单请求
请求方式:GET、POST、HEAD 三者之一
HTTP 头部信息不超过9种字段
预检请求:
只要符合以下任何一个条件的请求,都需要进行预检请求
请求方式为 GET、POST、HEAD 之外的请求 Method 类型
请求头中包含自定义头部字段
向服务器发送了 application/json 格式的数据
以上就是 node.js 中 使用 express 模块创建基本 web 服务器的方法,不懂得也可以在评论区里问我,以后会持续发布一些新的功能,敬请关注。