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 相关文章推荐
清华大学出版的事半功倍系列 javascript全部源代码
May 04 Javascript
JQuery事件e参数的方法preventDefault()取消默认行为
Sep 26 Javascript
easyui datagrid 键盘上下控制选中行示例
Mar 31 Javascript
javascript中typeof操作符和constucor属性检测
Feb 26 Javascript
Bootstrap CSS布局之按钮
Dec 17 Javascript
深入理解Node.js中的进程管理
Mar 13 Javascript
JS实现图片点击后出现模态框效果
May 03 Javascript
JavaScript常用事件介绍
Jan 21 Javascript
Vue + Elementui实现多标签页共存的方法
Jun 12 Javascript
vue2.0+SVG实现音乐播放圆形进度条组件
Sep 21 Javascript
VUE异步更新DOM - 用$nextTick解决DOM视图的问题
Nov 06 Javascript
javascript中Set、Map、WeakSet、WeakMap区别
Dec 24 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抽象工厂模式(Elgg)
2010/03/21 PHP
discuz免激活同步登入代码修改方法(discuz同步登录)
2013/12/24 PHP
浅谈使用 Yii2 AssetBundle 中 $publishOptions 的正确姿势
2017/11/08 PHP
PHP实现浏览器中直接输出图片的方法示例
2018/03/14 PHP
去除链接虚线全面分析总结
2006/08/15 Javascript
js鼠标滑轮滚动事件绑定的简单实例(兼容主流浏览器)
2014/01/14 Javascript
JavaScript分页功能的实现方法
2015/04/25 Javascript
jQuery基于排序功能实现上移、下移的方法
2016/11/26 Javascript
Vue.js 单页面多路由区域操作的实例详解
2017/07/17 Javascript
详解jQuery同步Ajax带来的UI线程阻塞问题及解决办法
2017/08/09 jQuery
深入理解vue中的slot与slot-scope
2019/04/22 Javascript
js仿京东放大镜效果
2020/08/09 Javascript
[06:04]DOTA2英雄梦之声Vol19卓尔游侠
2014/06/20 DOTA
[00:15]TI9观赛名额抽取
2019/07/10 DOTA
Python urlopen 使用小示例
2008/09/06 Python
让python的Cookie.py模块支持冒号做key的方法
2010/12/28 Python
学习python的几条建议分享
2013/02/10 Python
Python进行数据科学工作的简单入门教程
2015/04/01 Python
django 在原有表格添加或删除字段的实例
2018/05/27 Python
浅析Python装饰器以及装饰器模式
2018/05/28 Python
[原创]Python入门教程4. 元组基本操作
2018/10/31 Python
Python中flatten( )函数及函数用法详解
2018/11/02 Python
Python 类属性与实例属性,类对象与实例对象用法分析
2019/09/20 Python
Python 实现将大图切片成小图,将小图组合成大图的例子
2020/03/14 Python
浅谈selenium如何应对网页内容需要鼠标滚动加载的问题
2020/03/14 Python
跑鞋、网球鞋、网球拍、服装及装备:Holabird Sports
2016/09/19 全球购物
Lookfantastic意大利官网:英国知名美妆购物网站
2019/05/31 全球购物
生产部管理制度
2014/01/31 职场文书
期末自我鉴定
2014/02/02 职场文书
教师专业自荐书范文
2014/02/10 职场文书
学生会离职感言
2014/02/11 职场文书
迎七一演讲稿
2014/09/12 职场文书
会计主管岗位职责
2015/04/02 职场文书
2015年计生工作总结范文
2015/04/24 职场文书
指导教师推荐意见
2015/06/05 职场文书
民间借贷纠纷起诉书
2015/08/03 职场文书