详解用node.js实现简单的反向代理

前端之家收集整理的这篇文章主要介绍了详解用node.js实现简单的反向代理前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

之前用node.js实现简单的反向代理,最近需要回顾,就顺便发到随笔上了

不多说直接上代码

http.createServer(function(oreq,ores) {
console.log("服务已开启");
if (oreq) {
if (oreq.url !== '/favicon.ico') {
let content = '',postData = '';
// 封装获取参数的方法
function getParmas(oUrl) {
let oQuery = (typeof oUrl === "object") ? oUrl : url.parse(oUrl,true).query,data = {};
for (item in oQuery) {
if (item !== 'hostname') {
if (item !== 'path') {
data[item] = oQuery[item];
}
}
}
return querystring.stringify(data);
};
// 封装发起http请求的方法
function httpRequest(options,ores) {
let datas = "";
return http.request(options,function(res) {
res.setEncoding('utf8');
res.on('data',function(chunk) {
// 返回数据
datas += chunk;
});
res.on('end',function() {
ores.writeHead(200,{
"Content-Type": "application/json; charset = UTF-8","Access-Control-Allow-Origin": "*"
});
ores.end(datas);
})
})
};
// 数据块接收中
console.log(oreq.method.toUpperCase());
if (oreq.method.toUpperCase() === "POST") {
console.log("进入POST");
oreq.on("data",function(postDataChunk) {
postData += postDataChunk;
});
// 数据接收完毕,执行回调函数
oreq.on("end",function() {
console.log("接收完毕")
console.log(postData);
// 配置options
let oData = JSON.parse(postData);

      postData = getParmas(oData);

      let options = {
        hostname: oData.hostname,port: '80',path: oData.path,method: "POST"
      };
      // 发送请求
      let req = httpRequest(options,ores);
      req.on('error',function(e) {
        console.log('problem with request: ' + e.message);
      });
      req.write(postData); //发送请求数据
      req.end();
    });

  } else {
    let queryObj = url.parse(oreq.url,true).query;
    content = getParmas(oreq.url);
    let options = {
      hostname: queryObj.hostname,path: queryObj.path + content,method: "GET"
    };
    // 发送请求
    let req = httpRequest(options,ores);
    req.on('error',function(e) {
      console.log('problem with request: ' + e.message);
    });
    req.end();
  }
}

}
}).listen(8080,'127.0.0.1');

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程之家。

原文链接:https://www.f2er.com/nodejs/38340.html

猜你在找的Node.js相关文章