8 行 Node.js 代码实现代理服务器


Posted in Javascript onDecember 05, 2016

接触 Node.js 已有多年,一直喜欢它的单线程模型和异步IO特性,以及 JavaScript 语言本身的灵活性。同时,JavaScript 前后端通吃,在全栈开发领域具有独特的优势。今天就来看看作为服务端语言的 JavaScript,完成一个简单的代理服务器功能是多么容易。

简单地说,代理服务器就是代理用户访问目标站点的中介服务器。作为前端开发人员,代理的常见用途是跨域访问后台 API。当然,还可以用来科学上网。今天要分享的代码,就是跟科学上网有关。

话不多说,先上 code:

var express = require('express');
var request = require('request');
var app = express();
app.use('/', function(req, res) {
 var url = 'https://www.baidu.com/' + req.url;
 req.pipe(request(url)).pipe(res);
});
app.listen(process.env.PORT || 3000);

不到 10 行的代码,就实现了简单的代理服务器功能。是不是很神奇?

熟悉 Node.js 的话应该很容易看明白这几行代码。首先加载 express 模块,这个是创建 HTTP 服务器的一个流行框架。然后是 request,它封装了 HTTP 请求的各种方法,让发起请求变得非常容易。接下来实例化一个 express 对象,设置访问路由。最后监听 3000 端口。

先看效果。保存上述代码到文件 proxy.js,在文件所在路径执行:

node proxy.js

用浏览器打开http://localhost:3000/

8 行 Node.js 代码实现代理服务器

关键代码在路由处理方法内。

req.pipe(request(url)).pipe(res);

这个 pipe 方法很神奇,正如它的名字(管道)一样,它把浏览器的请求数据传给 request 客户端,然后将目标服务器的响应数据传回浏览器。这代码太TM简洁了!

那么,怎么实现科学上网呢?对,把代码放到没有网络封锁的服务器上运行,就OK了。比如,这个 任度搜 www.rendoso.com 背后就是 Google 代理。

欢迎拍(da)砖(shang)。

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,同时也希望多多支持三水点靠木!

Javascript 相关文章推荐
免费空间广告万能消除代码
Sep 04 Javascript
JavaScript 数组循环引起的思考
Jan 01 Javascript
10个实用的脚本代码工具
May 04 Javascript
同域jQuery(跨)iframe操作DOM(示例代码)
Dec 13 Javascript
详解JavaScript中循环控制语句的用法
Jun 03 Javascript
第一次接触神奇的Bootstrap
Oct 14 Javascript
Jquery Easyui选项卡组件Tab使用详解(10)
Dec 18 Javascript
jQuery阻止移动端遮罩层后页面滚动
Mar 15 Javascript
JS简单验证上传文件类型的方法
Apr 17 Javascript
JS使用new操作符创建对象的方法分析
May 30 Javascript
24个解决实际问题的ES6代码片段(小结)
Feb 02 Javascript
Vue如何实现变量表达式选择器
Feb 18 Vue.js
浅谈Node.js:Buffer模块
Dec 05 #Javascript
微信小程序 Windows2008 R2服务器配置TLS1.2方法
Dec 05 #Javascript
详解jquery easyui之datagrid使用参考
Dec 05 #Javascript
微信小程序 less文件编译成wxss文件实现办法
Dec 05 #Javascript
微信小程序 获取当前地理位置和经纬度实例代码
Dec 05 #Javascript
Servlet实现文件上传,可多文件上传示例
Dec 05 #Javascript
微信小程序 textarea 详解及简单使用方法
Dec 05 #Javascript
You might like
搜索和替换文件或目录的一个好类--很实用
2006/10/09 PHP
php实现paypal 授权登录
2015/05/28 PHP
PHP常用设计模式之委托设计模式
2016/02/13 PHP
php字符串的替换,分割和连接方法
2016/05/23 PHP
PHP中读取文件的几个方法总结(推荐)
2016/06/03 PHP
PHP二维数组实现去除重复项的方法【保留各个键值】
2017/12/21 PHP
jQuery Jcrop插件实现图片选取功能
2011/11/23 Javascript
输入自动提示搜索提示功能的使用说明:sugggestion.txt
2013/09/02 Javascript
javascript设置金额样式转换保留两位小数示例代码
2013/12/04 Javascript
黑帽seo劫持程序,js劫持搜索引擎代码
2015/09/15 Javascript
AngularJs中route的使用方法和配置
2016/02/04 Javascript
nodejs修复ipa处理过的png图片
2016/02/17 NodeJs
jQuery查找和过滤_动力节点节点Java学院整理
2017/07/04 jQuery
Javascript网页抢红包外挂实现分享
2018/01/11 Javascript
基于Vue2x实现响应式自适应轮播组件插件VueSliderShow功能
2018/05/16 Javascript
JS基于ES6新特性async await进行异步处理操作示例
2019/02/02 Javascript
微信小程序实现的一键拨号功能示例
2019/04/24 Javascript
微信小程序里引入SVG矢量图标的方法
2019/09/20 Javascript
微信小程序分包加载代码实现方法详解
2019/09/23 Javascript
Layui数据表格判断编辑输入的值,是否为我需要的类型详解
2019/10/26 Javascript
浅谈vue异步数据影响页面渲染
2019/10/29 Javascript
微信小程序手动添加收货地址省市区联动
2020/05/18 Javascript
跟老齐学Python之Python安装
2014/09/12 Python
python创建进程fork用法
2015/06/04 Python
python实现的系统实用log类实例
2015/06/30 Python
Python3.7 pyodbc完美配置访问access数据库
2019/10/03 Python
美国领先的医疗警报服务:Philips Lifeline
2018/03/12 全球购物
Gerry Weber德国官网:优质女性时装,德国最大的时装公司之一
2019/11/02 全球购物
函授毕业生自我鉴定
2013/11/06 职场文书
仓库管理专业个人的自我评价
2013/12/30 职场文书
教师节演讲稿
2014/05/06 职场文书
公司离职证明范本(5篇)
2014/09/17 职场文书
庆祝教师节标语
2014/10/09 职场文书
拉贝日记观后感
2015/06/05 职场文书
2016年大学生就业指导课心得体会
2015/10/09 职场文书
浅谈Python类的单继承相关知识
2021/05/12 Python