node.js中的Express-路由-express中间件( 四 )


2.编写POST接口
//定义post接口router.post('/post', (req, res) => {//通过req.body获取请求体中包含的url-encoded格式的数据const body = req.body//通过res.send()方法,向客户端响应结果res.send({status: 0, //0表示处理成功,1表示处理失败msg: 'GET请求成功!', //状态描述data: body //需要响应给客户端的数据})})
向服务器发送了这条数据,服务器原封不动的响应回客户端
3.接口的跨域问题
上面编写的GET和POST接口,存在一个很严重的问题:不支持跨域请求 。
解决接口跨域问题的方案主要有两种
1.CORS(主流的解决方案)
2.JSONP(有缺陷的解决方案,只支持GET请求)
3.1 使用cors中间件解决跨域问题
cors是的一个第三方中间件,由一系列HTTP响应头组成,这些HTTP响应头决定浏览器是否阻止前端js代码跨域获取资源,主要在服务器端进行配置,客户端无需做任何额外的配置,即可请求开启了CORS的接口 。
浏览器的同源安全策略默认会阻止网页‘跨域’获取资源,但如果接口服务器配置了CORS的相关http响应头,就可以解除浏览器端的跨域访问限制 。
1.运行npmcors安装中间件
2.使用const cors=('cors')导入中间件
3.在路由之前调用app.use(cors())
4.代码实现
创建接口代码:
const express = require('express')const app = express()//一定要在路由之前,配置cors这个中间件,从而解决接口跨域的问题const cors = require('cors')app.use(cors())//导入路由模块const router = require('./02apiRouter')//配置解析表单数据的中间件app.use(express.urlencoded({ extended: false }))//把路由模块注册到app上app.use('/api', router)app.listen(8080, () => {console.log('http://127.0.0.1:8080');})
路由模块代码如下:
const express = require('express')const router = express.Router()//在这里挂载对应的路由router.get('/get', (req, res) => {//通过req.query获取客户端通过查询字符串,发送到服务器的数据const query = req.query//调用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: 'GET请求成功!', //状态描述data: body //需要响应给客户端的数据})})module.exports = router