记一次react处理跨域问题

954 阅读2分钟

问题1:

最近在学习react的时候,尝试用网上免费的api去测试接口对接及本地调试,遇到本地8080端口发起对免费api网域名的请求出现跨域问题

出现这一原因是因为该地址后端不允许前端跨域,需要后端去配置响应头允许对应ip(如:http://127.0.0.1:8080)

问题2:

明确上面接口用不了之后,我们尝试换其他的接口,当我们在本地局域网内进行开发时,前端地址为:

http://127.0.0.1:8080,后端地址为 : http://127.0.0.1:7001

这个时候,我们前端8080端口去请求后端,也会产生跨域(因为同协议,同域名,不同端口)

遇到这一情况,我们可以通过配置webpack的proxy

axios发起请求

在所有需要请求转发的接口,前面加上标识字段如:'/api_2'

在项目中webpack.config.js中配置一下转发

module.exports = {
  entry: './src/main.js',
  output: {
    path: path.join(__dirname, `./dist${configMap[process.env.FH_ENV].buildPath}`),
    filename: 'fh_vr.js'
  },
  devServer: {
    port: 8080,
    contentBase: path.join(__dirname, 'public'),
    overlay: {
      warnings: false,
      errors: true,
    },
    proxy: {
      '/api_2': {
        target: 'http://127.0.0.1:7001 ', //这个是被替换的目标地址(需要转发请求的地址)
        changeOrigin: true, // 默认是false,如果需要代理需要改成true
        pathRewrite: {
          ["^/api_2"]: "",
        },
      },
    }
  },
}

上面配置的 '/api_2'表示,当请求接口前缀匹配到'/api_2'时,请求地址更换为target写入的地址进行转发请求。pathRewrite 表示将匹配到的/api_2 进行重写(需要时可以进行配置,比如:后端接口中并没有'/api_2'这样的字眼,就可以对其进行替换为空,或正确的url地址)

问题3:

官网中有建议使用在package.json 中进行配置proxy和安装http-proxy-middleware的方式去处理,我试了好一会,发现并未起任何作用,可能是因为我构建项目用的不是create-react-app?还是因为我配置了wabpack.config.js文件,有知道的求告诉我一下!

附上文档create-react-app: create-react-app.dev/docs/proxyi…