vue3+cli-service配置代理,跨域请求

一、配置代理端口和代理转发

在vue.config.js文件中 

const {defineConfig} = require('@vue/cli-service')
 
module.exports = defineConfig({
    devServer: {
        host: '0.0.0.0',
        port: 8088,  // 启动端口号
        proxy: {
            '/api': { 
                // 请求接口中要替换的标识
                target: '', 
                // 代理地址,后端地址
                ChangeOrigin: true, 
                // 是否允许跨域
                pathRewrite: {
                    '^/api': '' 
                // 这里理解成用‘/api’代替target里面的地址,后面组件中我们掉接口时直接用api代替 比如我要调用'http://40.00.100.100:3002/user/add',直接写‘/api/user/add’即可
                }
            }
        }
    }
})

二、配置接口请求

是一个http.js文件,根据自己需求放在适合的文件夹里,文件名自己也可以定义

import axios from 'axios'
const isDev = process.env.NODE_ENV === 'development'
const instance = axios.create({
  //TODO 部署修改线上地址
  // baseURL: isDev ? 'http://localhost:8088/api' : '线上地址',
  baseURL: '/api',
  timeout: 10000,
  withCredentials: true,
})

// 添加响应拦截器
instance.interceptors.response.use(
  function (response) {
    // 前端发送请求成功
    const res = response.data

    //根据返回的code值来做不同处理
    // 请求失败,返回错误信息
    if (res.code !== 0) {
      // 未登录跳转登录页面
      if (res.code === 40100) {
        const redirectUrl = window.location.href
        window.location.href = `/user/login?redirect=${redirectUrl}`
      }
      console.error('request error', res.message)
      return res.message
    }
    return res
  },
  function (error) {
    // 超出 2xx 范围的状态码都会触发该函数。
    return Promise.reject(error)
  },
)

/**
 * get请求
 * @param url 请求地址
 * @param params 请求参数
 */
export function getRequest(url, params) {
  return instance({
    method: 'GET',
    url: `${url}`,
    params: params,
  })
}

/**
 * post请求
 * @param url 请求地址
 * @param data 请求数据
 * @returns {Promise}
 */
export function postRequest(url, data) {
  return instance({
    method: 'POST',
    url: `${url}`,
    data,
  })
}

export default instance

在api/indexjs文件里使用

import { getRequest, postRequest } from '@/plugins/requestConfig'

export const userLogin = (params) => {
  return postRequest('/user/login', params)
}

注意:

1、代理地址target后面不要加注释,线上可能会报错

2、本地测试的时候baseURL: '/api'和proxy里的'/api'名字保持一致,且必须有不然会报跨域

3、pathRewrite里的'^/api': '' "跟后端保持一致,如果后端接口里有api可以不用加,如果没有则需要进行该处理,不然接口请求会报404,

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值