美文网首页
如何使用webpackDevServer实现请求转发

如何使用webpackDevServer实现请求转发

作者: 喜剧之王爱创作 | 来源:发表于2020-09-04 13:10 被阅读0次
keji.jpg

写在前面

在日常开发中,我们经常会遇到开发环境下跨域的问题,这时候,就需要我们用一个工具,将请求转发至对应的服务上,从而解决这个问题。在以前,我们可能会用到nginx这样的工具,做请求的代理转发,有了webpack后,我们可以通过devServer完成这一操作了,接下来我们将讲解一下,如何使用webpackDevServer实现请求转发

开始

我们使用一个react的webpack项目(之前文章讲解中自己搭建的一个简单demo),大家也可以使用自己的webpack项目,不限框架,这里我们重点在于devServer的请求转发。这里我用Axios发请求。我的代码如下

import React from 'react'
import ReactDom from 'react-dom'
import axios from 'axios'

class App extends React.PureComponent{

    componentDidMount () {
        axios.get('http://10.16.21.29:8080/...这里是你的接口地址').then(res => {
            console.log(res)
        })
    }

    render () {
        return (<div>Hello Webpack</div>)
    }
}

ReactDom.render(<App/>, document.getElementById('root'))

我们通过运行上面的代码,实现了一个请求的发送,也可以正确的在控制台打印出正确的结果。有人会发出疑问,为什么我没有发生跨域问题,因为我本地的接口的服务器对跨域做了处理,如果你的接口没有处理呢,那么你先暂时处理下,也可以不去处理,我们往下看。
通常情况下,我们的请求环境会有多个,有测试环境,开发环境等,如果我们在之类把域名写死的话,就会存在一些问题,所以,一般我们都会采用一种相对路径的形式,去掉前面的域名前缀 。
当你去掉前缀后,你会发现报这样的错


axioserr.png

我们的locahost:8080端口下并没有那个路径或者接口,于是我们就需要一种手段做一下请求的转发,将访问的对应路径,转发到有这个接口的对应服务器上。

devServer.proxy

webpack为我们提供了本地解决接口转发的方式,这就是devServer.proxy。我们参照Webapck官网,对我们的项目做一个代理转发的配置。

module.exports = {
     devServer: {
        contentBase: './dist',
        open: true,
        hot: true,
        proxy: {
            "/***/api(这里是你的接口包含的公共字段,用来匹配接口)": "http://www.***.com"(这是你的访问的服务器)
        }
    }
}

这时候,重启你的项目,就可以正常的访问了,devServer.proxy可以根据匹配规则,匹配到对应的接口,并将其转发到对应的
服务器上。

proxy.pathRewrite

有时候,我们会有这样的需求,后端的接口会有一些改动,或者在进度上有一些问题,他可能会把原本访问的'a.json'接口暂时让你去访问‘b.json’,这时候,如果你去改代码,那么等他a接口完成的时候,可能你还得再改回来,抛开工作量,这操作也是容易出错的,我们可以使用proxy.pathRewrite来解决这一痛点。

proxy: {
    "/react/api": {
        target: "http://www.dell-lee.com",
        pathRewrite: {
            'a.json': 'b.json'
        }
    }
}

其中,target还是我们之前的转发地址,pathRewrite则代表,我们访问'a.json'的时候,他会帮我们访问'b.json',这样,你就不用全局的修改代码了,试一下吧
当你用network进行请求监控的时候,你会发现,我们请求的还是‘a.json’,但是这时候结果已经是'b.json'的结果了。我们可以根据自己的需求,去选择时候需要配置。
注意:我们的proxy是devServer的一个配置,也就是说,只有在本地开发环境下,我们才可以使用,等线上就不会使用了

当然了,proxy的配置还有很多哈,这里不做一一详细介绍了,我简单罗列一些相关配置的作用

其他配置
  • secure,当我们要转发的网址是https时,我们要将其设为false
  • bypass,我们可以通过改配置项,实现请求的拦截
  • context,如果我们需要对多个路径进行转发,可以使用这个参数
  • index,devServer默认是不支持我们对'/'根路径的转发的,但是如果你想要对根路径转发,那就把index设置为false就好了
  • changeOrigin,有些网站为了方式爬虫爬取数据,对origin做了限制,那么我们想要去代理这样的网站,就需要将该值设为true

关于proxy的配置呢,我们这里就将这多,实际上,proxy是利用了一个http-proxy-middleware插件,我们可以从git上找到这个插件,其配置项还有很多,感兴趣的可以去学习一下。

写在最后

本篇,主要介绍了使用webpack devServer进行请求的转发,其配置项也是有很多,大家感兴趣的话,可以参考https://github.com/chimurai/http-proxy-middleware

相关文章

  • 如何使用webpackDevServer实现请求转发

    写在前面 在日常开发中,我们经常会遇到开发环境下跨域的问题,这时候,就需要我们用一个工具,将请求转发至对应的服务上...

  • filddler script脚本扩展

    本篇讲述如何修改 filddler script脚本实现以下功能请求转发:替换请求的host请求保存:保存请求的数...

  • 注解转发接口请求

    重构需要转发请求,使用切面实现,不需要转发时直接注掉相关注解即可注解写在需要转发的Controller接口上,be...

  • 请求转发与重定向

    请求转发 指将请求再转发到其他地址,转发过程中使用的是同一个request请求,转发后浏览器地址栏内容不变。请求转...

  • Python:网络编程

    在Python中如何实现Http请求?如何实现Scoket连接?以下直接介绍如何使用Python进行网络编程。 G...

  • nginx实现请求转发

    反向代理适用于很多场合,负载均衡是最普遍的用法。 nginx 作为目前最流行的web服务器之一,可以很方便地实现反...

  • Vue 实现请求转发

    可以在 vue.config.js 中对 devServer 进行配置: module.exports = {de...

  • 前后端联调(包括axios详解)

    使用asios发送异步请求 如何发送,端口不一致,使用proxy配置转发 axios拦截器,统一loading处理...

  • 小程序WebSocket通过F5无法转发问题解决

    本项目实现通过小程序实现语音通知功能,测试环境使用nginx转发一切正常。 业务架构: 公网请求到总行F5----...

  • 使用node转发请求

    前言 本篇文章基于 vue、node(koa) 需求 vue 项目开发过程中,接口跨域是一个很常见的问题。在开发时...

网友评论

      本文标题:如何使用webpackDevServer实现请求转发

      本文链接:https://www.haomeiwen.com/subject/hlynsktx.html