用webpack-server-dev的proxy设置代理,axios如何请求mock Server的模拟接口呢?

发布于 2022-09-11 16:23:41 字数 1812 浏览 22 评论 0

问题描述

新人刚接触 关于webpack-server-dev解决跨域有一个疑问。
已经配置好了代理的域名了, 但是axios直接请求了代理后的域名+路由, 自然就返回404了, 因为根本没有请求到mockServer的接口. 可能我对此有什么误解错了。希望能有大神 解释一下

问题出现的环境背景及自己尝试过哪些方法

比如我的mock服务器监听的服务器是8009端口,而我把接口的域名定向了项目的端口8008.用axios请求的时候 显示404, 因为根本不存在这个接口. 难道要使用fetch

相关代码

mock Server的服务: localhost: 8009

//webpack.config.js
module.exports = {
    ...
    
    devServer: {
        proxy: {
            '/api': 'http://localhost:8008',
        }
    },
    
    ...
}
//组件请求数据
axios.get('v1/api/tablelist')
.then(response => {
    console.log('response =========>', response)
})

你期待的结果是什么?实际看到的错误信息又是什么?

不用添加请求头的方法, 既能解决跨域, 也能成功请求到数据。谢谢

__

更新问题:2018.11.20

可能之前对proxy误解了。我现在再整理一下思路
首先: 我的后台接口地址是: http://localhost:8009/api/tablelist
而我项目的地址是: http://localhost:8008
所以需要代理的应该是8009的地址是吧?
也就是要这么配置devServer...

...
devServer: {
    proxy: {
        '/api': 'http://localhost:8009',
    }
},
...

不知道这么理解是否正确.另外我设置成这样, 请求接口也改成了

axios.get('/api/tablelist')
.then(response => {
    console.log('response =========>', response)
})

但为什么network里面的request url还是8008端口的呢?不是已经代理到8009了吗?谢谢

__

更新问题:2018.11.21

访问服务器和接口是可以拿到接口数据的。

clipboard.png

配置和上面的更新问题一样. 但是network请求的依旧是没经过代理的url http://localhost:8008/xxx

clipboard.png

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

旧时光的容颜 2022-09-18 16:23:41

network肯定是显示8008,代理是在后端的。

久随 2022-09-18 16:23:41

你的规则写的是 /api,但是你实际用的是 /v1起头。当然是不可能匹配上的。

甜心小果奶 2022-09-18 16:23:41

你的devServer配置里面匹配的 api url 的 pathname 是 /api 开头时,才会将请求转发到你指定的地址

比如你的 api 里面 axios({ url: '/api/123' }),就会转发到 http://localhost:8008/api/123 上

灵芸 2022-09-18 16:23:41

你需要使用pathRewrite,把匹配上的API字段替换成空字符,否则target里面会自动将匹配的API字段添加到target的后面。
另外,如果使用了了一个单斜杠的匹配,那么一个单斜杆的匹配必须放在proxy的最后一个,否则单斜杆的后面的匹配API都无法识别,它们都只会识别单斜杆就停止了。
下面是我的示例,

proxy: {
            '/myblog/get_articles': {
                target: 'http://localhost:9000/myblog/get_articles',
                secure: false,
                pathRewrite: {'^/myblog/get_articles': ''},
                changeOrigin: true
            },
            '/': {
                target: 'http://localhost:9999/dist/index.html',
                secure: false,
                pathRewrite: {'^/': ''},
            }
        }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文