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 相关文章推荐
TopList标签和JavaScript结合两例
Aug 12 Javascript
XMLHTTP 乱码的解决方法(UTF8,GB2312 编码 解码)
Jan 12 Javascript
关于jquery ajax 调用带参数的webservice返回XML数据一个小细节
Jul 31 Javascript
JavaScript获取页面中第一个锚定文本的方法
Apr 03 Javascript
微信小程序 POST请求(网络请求)详解及实例代码
Nov 16 Javascript
vue.js实现请求数据的方法示例
Feb 07 Javascript
JavaScript 通过Ajax 动态加载CheckBox复选框
Aug 31 Javascript
angularjs路由传值$routeParams详解
Sep 05 Javascript
bootstrap table sum总数量统计实现方法
Oct 29 Javascript
Angularjs 根据一个select的值去设置另一个select的值方法
Aug 13 Javascript
vue+elementUI动态生成面包屑导航教程
Nov 04 Javascript
javascript中contains是否包含功能实现代码(扩展字符、数组、dom)
Apr 07 Javascript
浅谈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
php 显示指定路径下的图片
2009/10/29 PHP
php源码 fsockopen获取网页内容实例详解
2016/09/24 PHP
php+jQuery ajax实现的实时刷新显示数据功能示例
2019/09/12 PHP
JavaScript 类似flash效果的立体图片浏览器
2010/02/08 Javascript
cookie 最近浏览记录(中文escape转码)具体实现
2013/06/08 Javascript
js获取页面description的方法
2015/05/21 Javascript
javascript实现很浪漫的气泡冒出特效
2020/09/05 Javascript
微信小程序 action-sheet底部菜单详解
2016/10/27 Javascript
Javascript DOM事件操作小结(监听鼠标点击、释放,悬停、离开等)
2017/01/20 Javascript
JavaScript正则替换HTML标签功能示例
2017/03/02 Javascript
Vue2.0 多 Tab切换组件的封装实例
2017/07/28 Javascript
BootStrap中Table隐藏后显示问题的实现代码
2017/08/31 Javascript
Node.js如何对SQLite的async/await封装详解
2019/02/14 Javascript
jquery实现广告上下滚动效果
2021/03/04 jQuery
[00:35]DOTA2上海特级锦标赛 EG战队宣传片
2016/03/04 DOTA
[01:06:12]VP vs NIP 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
[01:08:56]DOTA2-DPC中国联赛 正赛 Magma vs LBZS BO3 第一场 2月7日
2021/03/11 DOTA
Python的面向对象思想分析
2015/01/14 Python
python实现挑选出来100以内的质数
2015/03/24 Python
基于Python实现的微信好友数据分析
2018/02/26 Python
django启动uwsgi报错的解决方法
2018/04/08 Python
Python简单实现阿拉伯数字和罗马数字的互相转换功能示例
2018/04/17 Python
python 爬虫 批量获取代理ip的实例代码
2018/05/22 Python
python实现超简单的视频对象提取功能
2018/06/04 Python
解决Keras的自定义lambda层去reshape张量时model保存出错问题
2020/07/01 Python
Python如何实现自带HTTP文件传输服务
2020/07/08 Python
用html5的canvas画布绘制贝塞尔曲线完整代码
2013/08/14 HTML / CSS
绿色美容,有机护肤品和化妆品:Safe & Chic
2018/10/29 全球购物
激光脱毛、蓝光和护肤:Tria Beauty
2019/03/28 全球购物
您在慕尼黑的跑步商店:Lauf-bar
2019/10/11 全球购物
什么是servlet链?
2014/07/13 面试题
文明礼仪伴我行演讲稿
2014/05/12 职场文书
区级文明单位申报材料
2014/05/15 职场文书
公司门卫工作职责
2014/06/28 职场文书
2014年销售经理工作总结
2014/12/01 职场文书
酒店人事主管岗位职责
2015/04/11 职场文书