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

不多说直接上代码!
const http = require('http');
const url = require('url');
const querystring = require('querystring');
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,
port: '80',
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');
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# nodejs
# 反向代理
# 实现反向代理
# node
# 抛弃Nginx使用nodejs做反向代理服务器
# Node.js站点使用Nginx作反向代理时配置GZip压缩的教程
# 腾讯云(ubuntu)下安装 nodejs + 实现 Nginx 反向代理服务器
# Linux安装NodeJs并配合Nginx实现反向代理
# 利用node.js实现反向代理的方法详解
# 上了
# 多说
# 回调
# 大家多多
# typeof
# object
# oQuery
# postData
# content
# oUrl
# getParmas
# path
# hostname
# stringify
# return
# item
# true
# parse
# data
# query
相关文章:
如何通过虚拟主机快速完成网站搭建?
如何选择高效响应式自助建站源码系统?
代刷网站制作软件,别人代刷火车票靠谱吗?
学校为何禁止电信移动建设网站?
道歉网站制作流程,世纪佳缘致歉小吴事件,相亲网站身份信息伪造该如何稽查?
内部网站制作流程,如何建立公司内部网站?
家庭服务器如何搭建个人网站?
TestNG的testng.xml配置文件怎么写
c++如何打印函数堆栈信息_c++ backtrace函数与符号名解析【方法】
如何在Tomcat中配置并部署网站项目?
如何高效利用200m空间完成建站?
内网网站制作软件,内网的网站如何发布到外网?
如何在云主机上快速搭建网站?
相册网站制作软件,图片上的网址怎么复制?
导航网站建站方案与优化指南:一站式高效搭建技巧解析
如何选择域名并搭建高效网站?
教程网站设计制作软件,怎么创建自己的一个网站?
如何在自有机房高效搭建专业网站?
建站主机默认首页配置指南:核心功能与访问路径优化
如何用花生壳三步快速搭建专属网站?
香港服务器如何优化才能显著提升网站加载速度?
车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?
西安制作网站公司有哪些,西安货运司机用的最多的app或者网站是什么?
如何零基础开发自助建站系统?完整教程解析
成都网站制作公司哪家好,四川省职工服务网是做什么用?
微网站制作教程,我微信里的网站怎么才能复制到浏览器里?
如何在阿里云域名上完成建站全流程?
如何用IIS7快速搭建并优化网站站点?
网站制作哪家好,cc、.co、.cm哪个域名更适合做网站?
建站主机系统SEO优化与智能配置核心关键词操作指南
如何在景安云服务器上绑定域名并配置虚拟主机?
如何通过智能用户系统一键生成高效建站方案?
如何通过VPS建站无需域名直接访问?
制作门户网站的参考文献在哪,小说网站怎么建立?
建站之星logo尺寸如何设置最合适?
香港服务器租用费用高吗?如何避免常见误区?
c# 服务器GC和工作站GC的区别和设置
,交易猫的商品怎么发布到网站上去?
c++怎么使用类型萃取type_traits_c++ 模板元编程类型判断【方法】
如何快速搭建高效简练网站?
建站之星如何实现五合一智能建站与营销推广?
如何挑选优质建站一级代理提升网站排名?
整蛊网站制作软件,手机不停的收到各种网站的验证码短信,是手机病毒还是人为恶搞?有这种手机病毒吗?
矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?
湖北网站制作公司有哪些,湖北清能集团官网?
如何在IIS7中新建站点?详细步骤解析
小捣蛋自助建站系统:数据分析与安全设置双核驱动网站优化
宝盒自助建站智能生成技巧:SEO优化与关键词设置指南
XML的“混合内容”是什么 怎么用DTD或XSD定义
沈阳个人网站制作公司,哪个网站能考到沈阳事业编招聘的信息?
*请认真填写需求信息,我们会在24小时内与您取得联系。