之前用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
相关文章:
昆明网站制作哪家好,昆明公租房申请网上登录入口?
网站网页制作专业公司,怎样制作自己的网页?
如何在阿里云购买域名并搭建网站?
攀枝花网站建设,攀枝花营业执照网上怎么年审?
成都网站制作价格表,现在成都广电的单独网络宽带有多少的,资费是什么情况呢?
网站制作公司排行榜,四大门户网站排名?
详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)
韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐
网站建设制作需要多少钱费用,自己做一个网站要多少钱,模板一般多少钱?
如何在腾讯云服务器快速搭建个人网站?
如何挑选优质建站一级代理提升网站排名?
如何快速生成凡客建站的专业级图册?
建站之家VIP精选网站模板与SEO优化教程整合指南
如何在阿里云域名上完成建站全流程?
建站主机如何选?性能与价格怎样平衡?
高端企业智能建站程序:SEO优化与响应式模板定制开发
网站专业制作公司有哪些,做一个公司网站要多少钱?
车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?
简易网站制作视频教程,使用记事本编写一个简单的网页html文件?
个人摄影网站制作流程,摄影爱好者都去什么网站?
合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?
如何确保西部建站助手FTP传输的安全性?
如何快速搭建支持数据库操作的智能建站平台?
建站中国必看指南:CMS建站系统+手机网站搭建核心技巧解析
如何选择域名并搭建高效网站?
婚礼视频制作网站,学习*后期制作的网站有哪些?
网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?
制作网页的网站有哪些,电脑上怎么做网页?
网站制作企业,网站的banner和导航栏是指什么?
网站制作哪家好,cc、.co、.cm哪个域名更适合做网站?
广州网站设计制作一条龙,广州巨网网络科技有限公司是干什么的?
实惠建站价格推荐:2025年高性价比自助建站套餐解析
如何选购建站域名与空间?自助平台全解析
如何访问已购建站主机并解决登录问题?
如何通过山东自助建站平台快速注册域名?
网站制作和推广的区别,想自己建立一个网站做推广,有什么快捷方法马上做好一个网站?
建站之星手机一键生成:多端自适应+小程序开发快速建站指南
网页设计与网站制作内容,怎样注册网站?
网站建设设计制作营销公司南阳,如何策划设计和建设网站?
建站主机如何选?高性价比方案全解析
深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?
c# Task.ConfigureAwait(true) 在什么场景下是必须的
国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?
临沂网站制作公司有哪些,临沂第四中学官网?
交易网站制作流程,我想开通一个网站,注册一个交易网址,需要那些手续?
网站制作说明怎么写,简述网页设计的流程并说明原因?
网站制作知乎推荐,想做自己的网站用什么工具比较好?
宝塔面板创建网站无法访问?如何快速排查修复?
Android使用GridView实现日历的简单功能
宁波免费建站如何选择可靠模板与平台?
*请认真填写需求信息,我们会在24小时内与您取得联系。