export default defineConfig({
plugins: [
vue(),
],
resolve: {
alias: {
'@': fileURLToPath(new URL('./src', import.meta.url))
}
},
server: {
proxy: {
'/api': {
target: 'http://localhost:8080',
changeOrigin: true,
rewrite: (path) => path.replace(/^\/api/, '')
}
}
}
})
创建一个request.js文件,创建一个基于 Axios 的 HTTP 客户端实例,并设置了一个基本的 URL 前缀api,这个api是所有请求的公共前缀。
import axios from 'axios';
import{ElMessage} from 'element-plus'
import router from '@/router/router.js'
//定义一个变量,记录公共的前缀 , baseURL
const baseURL = '/api';
const instance = axios.create({baseURL})
<el-upload class="avatar-uploader" :show-file-list="false" :auto-upload="true" action="/api/upload"
name="file" :headers="{ 'Authorization': tokenStore.token }" :on-success="uploadSuccess">
<img v-if="imgUrl" :src="imgUrl" class="avatar" />
<img v-else src="@/assets/avatar.jpg" width="150px" height="150px" />
</el-upload>
这个文件上传action对应的路径是** /api/upload **,实际上api会被替换。
import request from '@/utils/request.js'
// 登录
export const loginUserService=(registerData)=>{
const params = new URLSearchParams()
for (let key in registerData){
params.append(key,registerData[key])
}
return request.post('/user/login',params)
}
通过这段配置,当前端应用程序发起以 /api 开头的请求时,请求将被代理到 http://localhost:8080(即后端 API 服务器)上进行处理。这样可以解决前端与后端的跨域请求问题,同时简化前端代码中的请求路径。