详解用node.js实现简单的反向代理
发布时间 - 2026-01-11 02:03:43 点击率:次之前用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
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
MySQL查询结果复制到新表的方法(更新、插入)
详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)
如何快速使用云服务器搭建个人网站?
Laravel如何实现邮箱地址验证功能_Laravel邮件验证流程与配置
如何生成腾讯云建站专用兑换码?
Swift中循环语句中的转移语句 break 和 continue
北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?
Gemini怎么用新功能实时问答_Gemini实时问答使用【步骤】
Win11任务栏卡死怎么办 Windows11任务栏无反应解决方法【教程】
专业商城网站制作公司有哪些,pi商城官网是哪个?
Python制作简易注册登录系统
JavaScript如何实现错误处理_try...catch如何捕获异常?
如何在阿里云虚拟服务器快速搭建网站?
在线教育网站制作平台,山西立德教育官网?
如何撰写建站申请书?关键要点有哪些?
html5如何实现懒加载图片_ intersectionobserver api用法【教程】
如何在七牛云存储上搭建网站并设置自定义域名?
Laravel的路由模型绑定怎么用_Laravel Route Model Binding简化控制器逻辑
如何正确选择百度移动适配建站域名?
googleplay官方入口在哪里_Google Play官方商店快速入口指南
利用vue写todolist单页应用
Laravel Admin后台管理框架推荐_Laravel快速开发后台工具
如何在Windows环境下新建FTP站点并设置权限?
bootstrap日历插件datetimepicker使用方法
制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?
Laravel如何升级到最新版本?(升级指南和步骤)
Laravel如何实现数据导出到CSV文件_Laravel原生流式输出大数据量CSV【方案】
如何在云主机快速搭建网站站点?
软银砸40亿美元收购DigitalBridge 强化AI资料中心布局
简单实现jsp分页
安克发布新款氮化镓充电宝:体积缩小 30%,支持 200W 输出
Laravel怎么设置路由分组Prefix_Laravel多级路由嵌套与命名空间隔离【步骤】
怎么用AI帮你设计一套个性化的手机App图标?
用v-html解决Vue.js渲染中html标签不被解析的问题
Laravel如何保护应用免受CSRF攻击?(原理和示例)
Laravel如何使用Contracts(契约)进行编程_Laravel契约接口与依赖反转
如何制作一个表白网站视频,关于勇敢表白的小标题?
HTML5段落标签p和br怎么选_文本排版常用标签对比【解答】
Java解压缩zip - 解压缩多个文件或文件夹实例
如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?
什么是JavaScript解构赋值_解构赋值有哪些实用技巧
BootStrap整体框架之基础布局组件
高配服务器限时抢购:企业级配置与回收服务一站式优惠方案
Win11怎么修改DNS服务器 Win11设置DNS加速网络【指南】
详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)
Laravel如何编写单元测试和功能测试?(PHPUnit示例)
Win11应用商店下载慢怎么办 Win11更改DNS提速下载【修复】
如何实现建站之星域名转发设置?
高防服务器租用如何选择配置与防御等级?
三星网站视频制作教程下载,三星w23网页如何全屏?

