Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 1313|回复: 0

通过nodejs代理服务器解决跨域问题

[复制链接]
  • TA的每日心情
    奋斗
    2024-11-24 15:47
  • 签到天数: 804 天

    [LV.10]以坛为家III

    2053

    主题

    2111

    帖子

    72万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    726782
    发表于 2021-4-16 09:24:00 | 显示全部楼层 |阅读模式

    1、本段代码用于解决前后端分离过程中产生的跨域问题。原理上是使用代理转发。使用nodejs语法编写,需要运行在nodejs环境下。

    2、使用方法

          1、普通ajax请求的url需要改成代码中监听的路由和端口。

          2、需要在ajax请求中添加额外添加2个参数,一,baseUrl真实访问接口的host地址;二,pathUrl需要访问的接口的path地址。

     

    const url = require('url');
    const http = require('http');
    const https = require('https'); // cnode是https协议
    //导入querystring模块(解析post请求数据)
    var querystring = require('querystring');
    
    const server = http.createServer((req, res) => {
      //var params = req.url.toString(1, req.url.length);
      //var params = url.parse(req.url, true).query;
      var data = '';
    
      if (req.method == "GET") {
        data = url.parse(req.url, true).query;
        data = JSON.stringify(data);
    
        let opt = {
          hostname: '',
          method: req.method,
          path: '',
          headers: {
            "Content-Type": 'application/json',
            "Content-Length": data.length
          }
        }
      
        if(data){
          opt.hostname = JSON.parse(data).baseUrl;
          opt.path = JSON.parse(data).pathUrl;
        }
      
        let body = '';
        let breq = https.request(opt, function (bres) {
          bres.on('data', function (data) {
            body += data;
          }).on('end', function () {
            res.writeHead(200, {
              'Access-Control-Allow-Origin': '*',
              "Access-Control-Allow-Methods": "*",
              "Access-Control-Allow-Headers": "Content-Type,XFILENAME,XFILECATEGORY,XFILESIZE,X-URL-PATH,x-access-token"
            })
            res.end(body);
          });
        }).on('error', function (e) {
          console.log("error: " + e.message);
        })
      
        breq.write(data);
        breq.end();
      } else {
        req.on('data',function(r){
          data += r;
        })
        req.on('end', function () {
          var opt = {
            hostname: '',
            method: req.method,
            path: '',
            headers: {
              "Content-Type": 'application/json',
              "Content-Length": data.length
            }
          }
        
          if(data){
            opt.hostname = JSON.parse(data).baseUrl;
            opt.path = JSON.parse(data).pathUrl;
          }
    
          let body = '';
          let breq = https.request(opt, function (bres) {
            bres.on('data', function (data) {
              body += data;
            }).on('end', function () {
              res.writeHead(200, {
                'Access-Control-Allow-Origin': '*',
                "Access-Control-Allow-Methods": "*",
                "Access-Control-Allow-Headers": "Content-Type,XFILENAME,XFILECATEGORY,XFILESIZE,X-URL-PATH,x-access-token"
              })
              res.end(body);
            });
          }).on('error', function (e) {
            console.log("error: " + e.message);
          })
        
          breq.write(data);
          breq.end();
        })
      }
    }).listen(3000, '127.0.0.1');
    
    console.log('监听 127.0.0.1:3000,服务已启动');

     

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2025-1-24 17:44 , Processed in 0.059901 second(s), 30 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表