Skip to content

vite+vue项目配置网络代理

  • .env.development
# 页面标题
VITE_APP_TITLE = XX系统

# 开发环境配置
VITE_APP_ENV = 'development'

# 接口前缀
VITE_APP_BASE_API = '/api'

# 接口服务地址
VITE_APP_SERVE = 'http://127.0.0.1:8080'
  • vite.config.js
js
import { defineConfig, loadEnv } from 'vite'
import path from 'path'

export default defineConfig(({ mode, command }) => {
  const env = loadEnv(mode, process.cwd())
  const { VITE_APP_ENV, VITE_APP_BASE_API, VITE_APP_SERVE } = env
  return {
    server: {
      proxy: {
        // https://cn.vitejs.dev/config/#server-proxy
        [VITE_APP_BASE_API + '/mock-api']: {
          target: 'https://mock.apifox.cn/', // mock 数据请求地址,自行查阅完善
          changeOrigin: true,
          rewrite: path => path.replace(RegExp(`${VITE_APP_BASE_API + '/mock-api'}`), '')
        },
        [VITE_APP_BASE_API]: { 
          target: VITE_APP_SERVE, // 真实接口地址
          changeOrigin: true,
          rewrite: path => path.replace(RegExp(`^${VITE_APP_BASE_API}`), ''),
          // 显示真实请求地址
          bypass(req, res, options) {
            const proxyURL = options.target + options.rewrite(req.url);
            console.log('proxyURL', proxyURL);
            req.headers['x-req-proxyURL'] = proxyURL; // 设置未生效
            res.setHeader('x-req-proxyURL', proxyURL); // 设置响应头可以看到
          },
        },
      }
    }
  }
})
  • src/api/mock-api/demo.js
js
// 请求 mock 数据
export function listDemo1(query) {
  return request({
    url: '/mock-api/demo/list',
    method: 'get',
    params: query
  })
}

// 请求 真实数据
export function listDemo2(query) {
  return request({
    url: '/demo/list',
    method: 'get',
    params: query
  })
}