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 相关文章推荐
event.srcElement+表格应用
Aug 29 Javascript
纯文字版返回顶端的js代码
Aug 01 Javascript
Node.js实现在目录中查找某个字符串及所在文件
Sep 03 Javascript
Angular.js如何从PHP读取后台数据
Mar 24 Javascript
bootstrap3 兼容IE8浏览器!
May 02 Javascript
javascript 解决浏览器不支持的问题
Sep 24 Javascript
微信小程序中使用javascript 回调函数
May 11 Javascript
微信小程序实现顶部普通选项卡效果(非swiper)
Jun 19 Javascript
Flutter 超实用简单菜单弹出框 PopupMenuButton功能
Aug 06 Javascript
微信公众号开发之微信支付代码记录的实现
Oct 16 Javascript
jQuery实现form表单基于ajax无刷新提交方法实例代码
Nov 04 jQuery
Vue 中 filter 与 computed 的区别与用法解析
Nov 21 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
轻松修复Discuz!数据库
2008/05/03 PHP
探讨PHP调用时间格式的参数详解
2013/06/06 PHP
php获取$_POST同名参数数组的实现介绍
2013/06/30 PHP
JS Timing
2007/04/21 Javascript
SlideView 图片滑动(扩展/收缩)展示效果
2010/08/01 Javascript
你的 mixin 真的兼容 ECMAScript 5 吗?
2013/04/11 Javascript
在jQuery中 关于json空对象筛选替换
2013/04/15 Javascript
js中通过父级进行查找定位元素
2014/06/15 Javascript
JavaScript的内存释放问题详解
2015/01/21 Javascript
AngularJS基础学习笔记之控制器
2015/05/10 Javascript
怎么限制input的text里输入的值只能是数字(正则、js)
2016/05/16 Javascript
JS封装通过className获取元素的函数示例
2016/12/20 Javascript
微信小程序 input输入框详解及简单实例
2017/01/10 Javascript
使用jquery给新生的th绑定hover事件的实例
2017/02/10 Javascript
vue.js开发实现全局调用的MessageBox组件实例代码
2017/11/22 Javascript
js实现各浏览器全屏代码实例
2018/07/03 Javascript
JavaScript数组去重的方法总结【12种方法,号称史上最全】
2019/02/28 Javascript
详解如何使用微信小程序云函数发送短信验证码
2019/03/13 Javascript
nodejs 递归拷贝、读取目录下所有文件和目录
2019/07/18 NodeJs
Node.js API详解之 dgram模块用法实例分析
2020/06/05 Javascript
[02:55]DOTA2英雄基础教程 发条技师
2013/12/04 DOTA
python中迭代器(iterator)用法实例分析
2015/04/29 Python
python统计日志ip访问数的方法
2015/07/06 Python
python利用dir函数查看类中所有成员函数示例代码
2017/09/08 Python
实例介绍Python中整型
2019/02/11 Python
Python如何调用JS文件中的函数
2019/08/16 Python
浅谈Python_Openpyxl使用(最全总结)
2019/09/05 Python
基于Python的Jenkins的二次开发操作
2020/05/12 Python
基于django 的orm中非主键自增的实现方式
2020/05/18 Python
运动会广播稿20字
2014/02/18 职场文书
仓库文员岗位职责
2014/04/06 职场文书
护理专科毕业自荐信范文
2014/04/21 职场文书
城市规划应届毕业生自荐信
2014/07/04 职场文书
2016年寒假家长评语
2015/10/10 职场文书
导游词之晋城蟒河
2019/12/12 职场文书
MySQL令人咋舌的隐式转换
2021/04/05 MySQL