Node.js学习-day7-编写接口

创建API路由模块

//08.apiRouter.js
const express = require('express')
const router = express.Router()

module.exports = router

//09.使用express编写接口.js
const express = require('express')
const router = require('./08.apiRouter')
const app = express()

app.use('/api',router)

app.listen(80,()=>{
    console.log('express server running at http://127.0.0.1:80')
})

编写GET接口

const express = require('express')
const router = express.Router()

router.get('/get',(req,res)=>{
    //req.query 获取客户端通过查询字符串,发送到服务器的数据
    const query = req.query
    res.send({
        status:0,
        msg:'GET请求成功',
        data:query
    })
})

module.exports = router

编写POST接口

router.post('/post',(req,res)=>{
    const body = req.body
    res.send({
        status:0,
        msg:'POST 请求成功',
        data:body
    })
})

https://staticfile.org/这个网站可以找到很多在线版本的工具,例如jquery、react、vue

接口的跨域问题

刚才编写的GET和POST请求,存在一个很严重的问题:不支持跨域请求
解决接口跨域问题的方案主要有两种:

  1. CORS(主流的解决方案,推荐使用)
  2. JSONP(有缺陷的解决方案,只支持GET请求)
    cors是Express的一个第三方中间件,通过安装和配置cors中间件,就可以很好的解决跨域问题;
运行npm install cors 安装中间件
使用const cors = require('cors') 导入中间件
在路由之前调用app.use(cors()) 配置中间件

JSONP的概念:浏览器端通过script标签的src属性,请求服务器上的数据,同时,服务器返回一个函数的调用,这种请求方式叫做JSONP。
如果项目中已经配置了CORS跨域资源共享,为了防止冲突,必须在配置CORS中间件之前声明JSONP接口。

//在CORS之前声明JSONP
//没有在路由上注册jsonp,所以手动添加api目录
app.get('/api/jsonp',(req,res)=>{
    //获取客户端发送过的回调函数的名字
    const funcName = req.query.callback
    //得到要通过JSONP形式发送给客户端的数据
    const data = {name:'zs',age:22}
    const scriptStr = `${funcName}(${JSON.stringify(data)})`
    res.send(scriptStr)
})

版权声明:本文为huangxunlove原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。