前端跨域处理3种方式

本文介绍了两种解决前端跨域问题的方法:一是使用Webpack的proxy配置,将前端请求路径重定向,避免跨域;二是后端服务器启用CORS,允许来自不同源的请求。通过修改Webpack配置和在服务器端添加CORS中间件,可以有效地处理跨域问题,实现前端和后端的顺利通信。
摘要由CSDN通过智能技术生成

案例说明:

后端服务器接口(server.js):

const express = require('express')
const app = express()

// get请求 
app.get('/user',(req,res) => {
  res.json({
    data:'XXX'
  })
})

app.listen(3000, ()=> {
  console.log('服务启动,端口 localhost:3000');
})

前端请求数据(index.js):

// 发送一个get请求
let xhr = new XMLHttpRequest();
xhr.open('get','http:localhost:3000/user', true);
xhr.onload = function(){
  console.log(xhr.response)
}
xhr.send()

1 使用webpack提供的proxy方法配置

总体思路:从http//:localhost:80 请求 http//:localhost:3000/user 后台数据,会存在跨域问题,因此将前端发送时候的http//:localhost:3000/user 改为 api/user,通过proxy代理,将 api/ 开头的数据改为 http//:localhost:3000/ ,从而解决跨域问题

1.1 在webpack.config.js内,配置如下代码

module.exports = {
  devSever: {
    proxy: { // 代理 过滤以api开头的地址
      '/api': {
        target: 'http//:localhost:3000',
        // 将api开头的地址重写为空,这样在后端地址上就不用加上api了
        pathRewrite: {'/api' : ''} 
      }
    }
  }
}

1.2 index.js内,修改如下代码  请求地址'http://localhost:3000/user'修改为 'api/user'

// 发送一个get请求
let xhr = new XMLHttpRequest();
// 请求地址'http://localhost:300/user'修改为 'api/user'
xhr.open('get','api/user', true);
xhr.onload = function(){
  console.log(xhr.response)
}
xhr.send()

2 在后台(serves.js)配置cors

cors就是在后台服务配置 allowCrossDomain

允许符合规范的请求源、请求头和请求方法通过

var allowCrossDomain = function(req, req, next) {
  // 允许所有请求源 ajax http://localhost:80
  res.header("Access-Control-Allow-Origin", "*");
  // 允许所有请求头 x-token 等
  res.header("Access-Control-Allow-Headers", "*");
  // 允许所有请求方法 get post 等
  res.header("Access-Control-Allow-Method", "*");
}
app.use(allowCrossDomain);

3 安装中间件:webpack-dev-middleware

webpack-dev-middleware 可以将前后端服务绑在一起,相当于部署为一个服务,就不存在跨域问题了

3.1 安装webpack-dev-middleware 

cmd中运行 npm i -S webpack-dev-middleware

3.2 在后台服务(server.js)中配置如下

// 配置中间件
let webpack = require('webpack');
let middleware = require('webpack-dev-middleware')
let compiler = webpack(require('./webpack.config.js'))
app.use(middleware(compiler))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值