美文网首页Vue笔记每日问题总结
2018-11-05 vue-cli 3.0+版本利用axios

2018-11-05 vue-cli 3.0+版本利用axios

作者: 许小花花 | 来源:发表于2018-11-05 21:20 被阅读7次

    一、问题描述

    当使用跨域jsonp接口时。referer属性是前台接口告诉服务器该接口的域名,而后台可以对应设置请求头referer从而对接口进行限制访问。
    当服务端对referer进行 验证后,非referer指定域名的请求访问该接口时,服务端会返回500。访问失败。

    二、解决

    由于在前端发送请求时无法直接修改referer值,故需要利用vue项目中的server进行请求转发,并在转发的同时设置referer进行伪造,冒充指定的域名欺骗服务端。

    三、实践

    在vue-cli 3.0-版本中,在config目录,提供了dev-server 和 dev-client的配置,可在dev-server.js文件中进行配置

    //引包
    var app = express()
    var apiRoutes = express.Router()
    
    //配置
    apiRoutes.get('/getDiscList', function (req, res) {
      var url = 'xxxxx' //接口地址
      axios.get(url, {
        headers: {
          referer: 'xxxx/',  //指定referer
          host: 'xxxx' //指定主机名
        },
        params: req.query
      }).then((response) => {
        res.json(response.data)
      }).catch((e) => {
        console.log(e)
      })
    })
    
    app.use('/api', apiRoutes)
    

    而在vue-cli 3.0+中对配置文件进行了简化,去除了dev-server配置文件。
    需要在 webpack.dev.conf.js中进行配置

    // 引包
    var express = require('express')
    var axios = require('axios')
    var app = express()
    var apiRoutes = express.Router()
    // 配置
    devServer: {
        //添加一个before方法
        before(apiRoutes){
          apiRoutes.get('/api/xxxx',(req,res)=>{ //将对本api请求进行转发
            const url = 'xxx'; //转发的目的url
            axios.get(url, {
              headers: {
                referer: 'https://xxx',
                host: 'xxx'
              },
              params: req.query  //请求的query
            }).then((response) => {
              //response是api地址返回的,数据在data里。
              res.json(response.data)
            }).catch((e) => {
              console.log(e);
            })
          });
           app.use('/api', apiRoutes);
        }
      }
    

    此处在项目实践中出现了代理失败的问题

    404
    此处出现了404,经排查,问题在于配置中的/api/xxx缺少了开头的斜杠`/,导致无法捕获到浏览器发出的本地请求,也就没有执行下面对headers进行配置后使用axios发送jsonp请求的逻辑。整个代理并没有触发,并且本地的接口也并不存在,所以404。

    相关文章

      网友评论

        本文标题:2018-11-05 vue-cli 3.0+版本利用axios

        本文链接:https://www.haomeiwen.com/subject/fgjexqtx.html