Vuecli3+express实现跨域

  • Post author:
  • Post category:vue



目录


一,本地跨域


二,线上跨域


一,本地跨域

首先,本地服务器地址开放的是3000端口,云服务器上开发的是4000端口,项目线上访问端口为9899,如下:

由于本地项目默认为8080端口,所以访问本地项目地址为:

http://localhost:8080

这里线上开放的项目访问端口是9899,云服务器公网ip为:120.76.197.111,因此线上项目访问地址为:

http://120.76.197.111:9899

在根目录(和package.json同级)下创建vue.config.js,内容如下

vue.config.js

module.exports = {
    devServer: {
        proxy: {
            '/api': {
                target: 'http://localhost:3000', //本地服务器地址开放的是3000端口
                changeOrigin: true, //這裡true表示实现跨域
                pathRewrite: {
                    '^/api': ''
                }
            }
        }
    }
}

这里是封装的axios.js

import axios from 'axios'
import qs from 'qs'

axios.defaults.timeout = 1000 * 60 * 2 //最长加载2分钟
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=utf-8'

//请求拦截器
axios.interceptors.request.use(
    config => {
        return config
    },
    error => {
        return Promise.reject(error)
    }
)
//响应拦截器即异常处理
axios.interceptors.response.use(response => {
    return response
}, err => {
    console.log('err1', err)
    return Promise.resolve(err.response)
})

export default {
    get(url, params = {}) {
        return new Promise((resolve, reject) => {
            axios.get(url, {
                params: params
            }).then(res => {
                resolve(res)
            }).catch(err => {
                reject(err)
            })
        })
    },

    post(url, params = {}) {
        return new Promise((resolve, reject) => {
            axios.post(url, qs.stringify(params))
                .then(response => {
                    resolve(response)
                }).catch(err => {
                    reject(err)
                })
        })
    }
}

login

express里面的app.js

var cors = require('cors');
app.use(cors());

注意:cors跨域放在路由(/user)之前

如果要引入天气接口,解决跨域如下:


天气接口网站:

https://www.tianqiapi.com

(有访问次数限制)

二,线上跨域

当本地跨域处理好后,将打包生成的dist文件夹上传到云服务器中,会发现先生依然会跨域。

解决方法很简单,就是使用nginx

首先要在云服务器中安装nginx,具体的安装百度有很多,这里主要就说一下跨域的问题

注意:这里的proxy_pass后面为线上服务器地址

 server {

        listen 9899;
        server_name  120.76.197.111;
        include /etc/nginx/default.d/*.conf;

        location / {
          root /opt/NKYYGS/dist/;
                        index index.html index.htm;     #默认访问路径
                try_files $uri $uri/ /index.html;

        }
         location /api {
                rewrite  ^.+api/?(.*)$ /$1 break;
               proxy_pass http://120.76.197.111:4000;

        }

        error_page 404 /404.html;
            location = /40x.html {
        }
    }



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