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 相关文章推荐
bcastr2.0 通用的图片浏览器
Nov 22 Javascript
JQuery 网站换肤功能实现代码
Nov 02 Javascript
jquery 与NVelocity 产生冲突的解决方法
Jun 13 Javascript
js模拟hashtable的简单实例
Mar 06 Javascript
jQuery实现数字加减效果汇总
Dec 16 Javascript
Javascript基础教程之数据类型 (字符串 String)
Jan 18 Javascript
Javascript实现可旋转的圆圈实例代码
Aug 04 Javascript
浅谈jquery上下滑动的注意事项
Oct 13 Javascript
JavaScript输入框字数实时统计更新
Jun 17 Javascript
JavaScript实现旋转轮播图
Aug 18 Javascript
AjaxUpLoad.js实现文件上传功能
Mar 02 Javascript
Vue实现开关按钮拖拽效果
Sep 22 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中的escape函数
2013/06/29 PHP
Laravel框架文件上传功能实现方法示例
2019/04/16 PHP
javascript面向对象编程代码
2011/12/19 Javascript
jQuery 联动日历实现代码
2012/05/31 Javascript
深入领悟JavaScript中的面向对象
2013/11/18 Javascript
将中国标准时间转换成标准格式的代码
2014/03/20 Javascript
Jquery中的$.each获取各种返回类型数据的使用方法
2015/05/03 Javascript
JS iFrame加载慢怎么解决
2016/05/13 Javascript
form+iframe解决跨域上传文件的方法
2016/11/18 Javascript
微信公众号  提示:Unauthorized API function 问题解决方法
2016/12/05 Javascript
JS实现简单的二元方程计算器功能示例
2017/01/03 Javascript
Angular2 父子组件通信方式的示例
2018/01/29 Javascript
angular4 JavaScript内存溢出问题
2018/03/06 Javascript
JS常见面试试题总结【去重、遍历、闭包、继承等】
2019/08/27 Javascript
countUp.js实现数字滚动效果
2019/10/18 Javascript
ReactRouter的实现方法
2021/01/25 Javascript
nestjs返回给前端数据格式的封装实现
2021/02/22 Javascript
跨平台python异步回调机制实现和使用方法
2013/11/26 Python
Python爬取qq music中的音乐url及批量下载
2017/03/23 Python
Django基础知识 web框架的本质详解
2019/07/18 Python
利用Python绘制有趣的万圣节南瓜怪效果
2019/10/31 Python
Python 实现判断图片格式并转换,将转换的图像存到生成的文件夹中
2020/01/13 Python
世界上最大的在线学习和教学市场:Udemy
2017/11/08 全球购物
最耐用行李箱,一箱永流传:Briggs & Riley(全球终身保修)
2017/12/07 全球购物
美国名牌手表折扣网站:Jomashop
2020/05/22 全球购物
Aosom西班牙:家具在线商店
2020/06/11 全球购物
高三自我鉴定
2013/10/23 职场文书
运动会100米解说词
2014/01/23 职场文书
模范家庭事迹材料
2014/02/10 职场文书
秋季运动会广播稿
2014/02/22 职场文书
纠风工作实施方案
2014/03/15 职场文书
竞选卫生委员演讲稿
2014/04/28 职场文书
李培根演讲稿
2014/05/22 职场文书
学校中层领导培训心得体会
2016/01/11 职场文书
德劲DE1108畅想
2021/04/22 无线电
OpenCV-Python实现轮廓的特征值
2021/06/09 Python