使用node代理服务器解决跨域

1.node代理服务器解决跨域

原理

  • 跨域是因为浏览器的同源安全策略所导致的,但是服务器与服务器、app与服务器、小程序与服务器是不存在跨域的
  • 所以利用nodejs搭建一个代理服务器,将本地开发的前端代码托管到这个代理服务器的静态资源中
  • 将静态资源的请求地址换成代理服务器地址
  • 在这个代理服务器中使用http-proxy-middleware三方中间件来转发请求和响应
    • 当客户端发起请求,实际上是请求这个代理服务器(因为前端资源和代理服务器是在一起的符合同源策略),然后代理服务器拿到请求后,向目标服务器发起请求,目标服务器接送到请求然后响应数据给代理服务器,代理服务器再将结果给到客户端
  • 其实webpack中的代理服务器也是用到这个中间件的,总所周知,webpack是基于node的,我们可以想一下,用webpack来启动文件也是需要启动服务的,然后访问静态资源,原理和我们现在编写代码一样

安装

npm i http-proxy-middleware

7.4.1.使用

客户端

<script>
  // 将请求的地址是代理服务器
    const requst = new Request('http://localhost:8001/api/test', {
     
      method: 
  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
通过代理服务器解决跨域问题,需要在前端调用代理服务器的接口,再由代理服务器向目标服务器发送请求,最后将目标服务器的响应返回给前端。具体步骤如下: 1. 在代理服务器上实现一个接口,接收前端发送的请求,包括请求的 URL、请求方法、请求头和请求体等信息。 2. 在代理服务器使用 http 模块向目标服务器发送请求,将前端发送的请求信息转发给目标服务器。 3. 目标服务器接收请求并返回响应,代理服务器将目标服务器的响应返回给前端。 下面是一个 Node.js 代码示例: ```js const http = require('http'); const request = require('request'); const proxy = http.createServer((req, res) => { // 解析前端发送的请求信息 const options = { url: req.url, method: req.method, headers: req.headers, body: req.body }; // 向目标服务器发送请求 request(options, (error, response, body) => { if (error) { console.error(error); res.statusCode = 500; res.end('Internal Server Error'); } else { // 将目标服务器的响应返回给前端 res.statusCode = response.statusCode; res.headers = response.headers; res.end(body); } }); }); proxy.listen(8080, () => { console.log('Proxy server is running on port 8080'); }); ``` 在前端中,只需要将请求的 URL 修改为代理服务器的接口地址,即可实现跨域访问目标服务器。例如: ```js fetch('http://localhost:8080/api/data') .then(response => response.json()) .then(data => console.log(data)) .catch(error => console.error(error)); ``` 上面的代码中,fetch 请求的 URL 修改为代理服务器的接口地址,代理服务器会将请求转发给目标服务器,并将目标服务器的响应返回给前端

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值