zoukankan      html  css  js  c++  java
  • 关于vue2.x使用axios以及http-proxy-middleware代理处理跨域的问题

    axios现在以及是尤大大推荐使用的了,官方不在维护vue-reresource.

    由于是地第一次使用axios, 在使用过程中猜了很大的坑

    首先我们使用vue-cli创建的项目, 访问接口肯定是跨域了, 因为我们的本地服务默认的地址一般是localhost:8080 我们的服务器端肯定不是这个, 所以就形成跨域访问, axios不支持jsonp, 所以我们就要使用http-proxy-middleware中间件做代理,
    http-proxy-middleware的github

    安装

    npm i axios --save-dev
    
    npm install --save-dev http-proxy-middleware
    
    // vue-cli 已经把http-proxy-middleware写在项目依赖里面了
    

    引入axios

    在项目的src/main.js引入axios

    import axios from 'axios'
    
    Vue.prototype.$axios = axios;
    // axios 不支持Vue.use(axios)
    

    配置http-proxy-middleware本地代理

    打开config/index.js

    var path = require('path')
    
    module.exports = {
        build: {
            env: require('./prod.env'),
            index: path.resolve(__dirname, '../dist/index.html'),
            assetsRoot: path.resolve(__dirname, '../dist'),
            assetsSubDirectory: 'static',
            assetsPublicPath: './',
            productionSourceMap: false,
            // Gzip off by default as many popular static hosts such as
            // Surge or Netlify already gzip all static assets for you.
            // Before setting to `true`, make sure to:
            // npm install --save-dev compression-webpack-plugin
            productionGzip: false,
            productionGzipExtensions: ['js', 'css'],
            // Run the build command with an extra argument to
            // View the bundle analyzer report after build finishes:
            // `npm run build --report`
            // Set to `true` or `false` to always turn it on or off
            bundleAnalyzerReport: process.env.npm_config_report
        },
        dev: {
            env: require('./dev.env'),
            port: 8080,
            autoOpenBrowser: true,
            assetsSubDirectory: 'static',
            assetsPublicPath: '/',
            proxyTable: {
    	        修改这里修改这里修改这里
    	    },
            // CSS Sourcemaps off by default because relative paths are "buggy"
            // with this option, according to the CSS-Loader README
            // (https://github.com/webpack/css-loader#sourcemaps)
            // In our experience, they generally work as expected,
            // just be aware of this issue when enabling this option.
            cssSourceMap: false
        }
    }
    
    

    这里是默认的配置, 找到线面的dev对象里面的proxyTable修改

    proxyTable: {
       '/api': {
             target:'http://www.baidu.com/api',
             changeOrigin:true,
             pathRewrite:{
                 '^/api': ''
             }
         }
     }
    

    target 的参数就是你要访问的服务器地址, 你在代码里面写/api就等于写了这个地址 , 比如我要访问http://www.baidu.com/api/login这个接口在代码里面只需写/api/login就可以了

    至于build/dev.server.js 已经无需修改了, 里面已经有封装好了方法了

    // proxy api requests
    Object.keys(proxyTable).forEach(function (context) {
      var options = proxyTable[context]
      if (typeof options === 'string') {
        options = { target: options }
      }
      app.use(proxyMiddleware(options.filter || context, options))
    })
    

    网上好多的解决方案都是在build/dev.server.js里面自己在加内容, 完全不用了

    做完上述操作之后一定要重启服务ctrl+c然后npm run dev

    做完上述操作之后一定要重启服务ctrl+c然后npm run dev

    做完上述操作之后一定要重启服务ctrl+c然后npm run dev

    然后我们就可以用axios访问接口了

    	this.$axios({
    		method: "POST",
    		withCredentials: false,
    		url: "/api/login",
    		data: {
    			name: "1511328705UZVQ",
    			psd: "123456"
    		}
    	})
        .then(function(res) {
    	     console.log(res);
        })
        .catch(function(err) {
    	     console.log(err);
    	});
    
  • 相关阅读:
    CodeForces 219D Choosing Capital for Treeland (树形DP)
    POJ 3162 Walking Race (树的直径,单调队列)
    POJ 2152 Fire (树形DP,经典)
    POJ 1741 Tree (树的分治,树的重心)
    POJ 1655 Balancing Act (树的重心,常规)
    HDU 2196 Computer (树形DP)
    HDU 1520 Anniversary party (树形DP,入门)
    寒门子弟
    JQuery选择器(转)
    (四)Web应用开发---系统架构图
  • 原文地址:https://www.cnblogs.com/mr-yuan/p/7918378.html
Copyright © 2011-2022 走看看