首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么vue.config.js 404中的代理

为什么vue.config.js 404中的代理
EN

Stack Overflow用户
提问于 2020-10-08 06:45:59
回答 1查看 2.7K关注 0票数 0

我有一个小的前端和后端分离的项目与开发环境和生产环境,所以我想设置代理调用api。vue/cli版本为4.6.5。

文件结构:

代码语言:javascript
运行
复制
src
 axios
  api.js
  request.js
 components
  home
   LastBlogs.vue
.env.development
.env.production
package.json
vue.config.js

.env.development:

代码语言:javascript
运行
复制
    NODE_ENV = 'development'
    
    VUE_APP_BASE_API = '/dev-api'
    
    VUE_APP_API_ADDRESS= 'http://localhost:8080/blog/'

.env.production:

代码语言:javascript
运行
复制
    NODE_ENV = 'production'
    
    # base api
    VUE_APP_BASE_API = '/api'
    
    # api publicPath
    VUE_APP_API_ADDRESS= 'http://localhost:8080/blog'

vue.config.js:

代码语言:javascript
运行
复制
    'use strict'
    var path = require('path')
    module.exports = {
        configureWebpack: {
            devtool: 'source-map'
        },
        assetsDir: 'static',
        devServer: {
            contentBase: path.join(__dirname, 'dist'),
            compress: true,
            port: 8001,
            proxy: {
                [process.env.VUE_APP_BASE_API]: {
                  target: [process.env.VUE_APP_API_ADDRESS], // api地址
                  changeOrigin: true,
                  ws: true,
                  pathRewrite: {
                    ['^' + process.env.VUE_APP_BASE_API]: '/api',
                  }
                }
              }
        }
    }

axios:

代码语言:javascript
运行
复制
    import axios from 'axios'
    import qs from 'qs'
    // import {app} from '../main.js'
    
    console.log(process.env)
    
     /****** 创建axios实例 ******/
    const request = axios.create({
        baseURL: process.env.VUE_APP_API_ADDRESS,
        timeout:5000
    })
    
    // some code of interceptors
    export default request;

api.js:

代码语言:javascript
运行
复制
    import request from './request.js'
    
    var api = process.env.VUE_APP_BASE_API //'/api'
    export function getLastBlogs(){
        return request({
            url: api+'/blog/lastBlogs',
            method: 'get'
        })
    }

我在vue文件中调用api,如下所示:

代码语言:javascript
运行
复制
    <script>
    import {getLastBlogs} from '@/axios/blogApi.js'
    export default {
        name: 'LastBlogs',
        data() {
            return {
                blogs: ["AAAA", "BBBB"]
            }
        },
        created: async function(){
                
            let res = await getLastBlogs();
            this.blogs = res.data
            }
    }
    </script>

我在终点站得到404:

错误: xhr.js:160 GET http://localhost:8080/blog/dev-api/blog/lastBlogs 404

后端的api也是可以的:

当我将http://localhost:8080/blog/api/blog/lastBlogs放在浏览器中时,我得到以下信息:{"code":"0","msg":"操作成功","data":{"id":1,"blogUser":1,"blogTitle":"test1","blogDescription":"for“,"blogContent":"ABABABABAB","blogCreated":"2020-09-20T10:44:01","blogStatus":0},{id:2,"blogUser":1,"blogTitle":"test2",“blogDescription”:“用于测试”,"blogContent":"BABABABABA","blogCreated":"2020-08-20T10:44:01",“blogStatus”:0}

我该怎么办?谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-08 08:39:45

因此,您正在配置Vue CLI server (运行在端口8001上)将所有请求代理到/apihttp://localhost:8080/blog/api (服务器),但同时配置Axios以使用baseURL: process.env.VUE_APP_API_ADDRESS ...which意味着Axios将所有请求直接发送到您的服务器,而不是代理.

只需从Axios配置中删除该baseURL: process.env.VUE_APP_API_ADDRESS即可。

我还认为代理配置中的pathRewrite选项是不正确的。

将请求发送给/dev-api/blog/lastBlogs

  • Request的
  1. 转到Vue dev-server,(localhost:8001)
  2. Proxy将/dev-api转换为http://localhost:8080/blog/dev-api = http://localhost:8080/blog/dev-api/blog/lastBlogs
  3. pathRewrite应用于全路径部分,URL - /blog/dev-api/blog/lastBlogs - RegEx ^/dev-api将不匹配

G 224

尝试将pathRewrite转换为[process.env.VUE_APP_BASE_API]: '/api'

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64257135

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档