美文网首页
vue-cli开发时跨域请求服务端NodeJS

vue-cli开发时跨域请求服务端NodeJS

作者: helloyoucan | 来源:发表于2017-07-10 18:58 被阅读0次

    在做一个vue+node的个人博客时,突然想如果前台在开发环境下可以和服务端连起来测试就好了。但是由于端口不同,所以得跨域请求了,但是前台开发完后,是不是全部URL都要改?
    于是搜索了一下,发现了“proxyTable”。

    修改config/文件夹下的index.js

    dev: {
        proxyTable: {
          // proxy all requests starting with /api to jsonplaceholder
          '/api': {//虚拟目录
            target: 'http://127.0.0.1:3000',//地址
            changeOrigin: true,
            pathRewrite: {
              '^/api': ''//由于上面的虚拟目录实际上是不存在的,不去掉的话访问的时候显示的url会变成'http://127.0.0.1:3000/api',所以得去掉
            }
          }
        },
    

    配置了上面的参数后,在调用时就要(这里用的是axios,例如地址是http://127.0.0.1:3000/aaa

    axios.post('/api/aaa', {})
              .then(function (response) {
                console.log(response);
              })
              .catch(function (error) {
                console.log(error);
              });
    

    为什么要有个‘/api’?因为步骤1那里写的是‘/api’,那怎么办?别忘了,因为用的是axios,所以可以配置一下baseURL ,我这里就全局配置baseURL

    axios.defaults.baseURL = '/api'
    

    这样就可以通过代理访问服务端了

    如果不想通过代理而是直接访问服务端,那就在服务端配置允许所有域访问

    配置服务端

    服务端我用的是express框,不借助其它包可以这样配置

    app.all('*', function (req, res, next) {
        res.header('Access-Control-Allow-Origin', '*');
        res.header('Access-Control-Allow-Headers', 'Content-Type, Content-Length, Authorization, Accept, X-Requested-With , yourHeaderFeild');
        res.header('Access-Control-Allow-Methods', 'PUT, POST, GET, DELETE, OPTIONS');
        if (req.method == 'OPTIONS') {
            res.send(200);
            /*让options请求快速返回*/
        } else {
            next();
        }
    });
    

    然后用cors,可以这样配置

    //独自设置
    var cors = require('cors');
    app.post('/aaa',cors(), ...);
    
    //全局设置
    var cors = require('cors')
    var app = express()
    app.use(cors())
    

    更多用法请参考cors

    大功告成啦!可以愉快地继续写代码啦

    相关文章

      网友评论

          本文标题:vue-cli开发时跨域请求服务端NodeJS

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