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 相关文章推荐
jQuery 注意事项 与原因分析
Apr 24 Javascript
一个简单的实现下拉框多选的插件可移植性比较好
May 05 Javascript
兼容Firefox的Javascript XSLT 处理XML文件
Dec 31 Javascript
jquery代码实现简单的随机图片瀑布流效果
Apr 20 Javascript
JS实现网页标题随机显示名人名言的方法
Nov 03 Javascript
跟我学习javascript的垃圾回收机制与内存管理
Nov 23 Javascript
jQuery语法小结(超实用)
Dec 31 Javascript
基于JavaScript实现通用tab选项卡(通用性强)
Jan 07 Javascript
跨域资源共享 CORS 详解
Apr 26 Javascript
微信小程序 wxapp内容组件 progress详细介绍
Oct 31 Javascript
vue.js的手脚架vue-cli项目搭建的步骤
Aug 30 Javascript
JavaScript中 ES6变量的结构赋值
Jul 10 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/08/24 PHP
php中数组首字符过滤功能代码
2012/07/31 PHP
解析PHP缓存函数的使用说明
2013/05/10 PHP
php获得文件大小和文件创建时间的方法
2015/03/13 PHP
php计算整个目录大小的方法
2015/06/01 PHP
Thinkphp和onethink实现微信支付插件
2016/04/13 PHP
PHP7安装Redis扩展教程【Linux与Windows平台】
2016/09/30 PHP
Laravel 框架返回状态拦截代码
2019/10/18 PHP
json格式化/压缩工具 Chrome插件扩展版
2010/05/25 Javascript
基于jQuery的合并表格中相同文本的相邻单元格的代码
2011/04/06 Javascript
变量声明时命名与变量作为对象属性时命名的区别解析
2013/12/06 Javascript
js构造函数、索引数组和属性的实现方式和使用
2014/11/16 Javascript
JS动态创建DOM元素的方法
2015/06/09 Javascript
jquery实现邮箱自动填充提示功能
2015/11/17 Javascript
jQuery div拖拽用法实例
2016/01/14 Javascript
[原创]JQuery 在表单提交之前修改 提交的值
2016/04/14 Javascript
javascript实现秒表计时器的制作方法
2017/02/16 Javascript
javascript+html5+css3自定义弹出窗口效果
2017/10/26 Javascript
手把手教你用Node.js爬虫爬取网站数据的方法
2018/07/05 Javascript
解决await在forEach中不起作用的问题
2021/02/25 Javascript
在Python中实现贪婪排名算法的教程
2015/04/17 Python
详解使用pymysql在python中对mysql的增删改查操作(综合)
2017/01/18 Python
为什么str(float)在Python 3中比Python 2返回更多的数字
2018/10/16 Python
python字符串和常用数据结构知识总结
2019/05/21 Python
python 自动轨迹绘制的实例代码
2019/07/05 Python
pycharm重命名文件的方法步骤
2019/07/29 Python
在Python中获取操作系统的进程信息
2019/08/27 Python
CSS实现的一闪而过的图片闪光效果
2014/04/23 HTML / CSS
澳大利亚女性快速时尚零售商:Ally Fashion
2018/04/25 全球购物
英国门把手公司:Door Handle Company
2019/05/12 全球购物
为什么需要版本控制
2016/10/28 面试题
技术入股合作协议书
2014/10/07 职场文书
客户经理岗位职责大全
2015/04/09 职场文书
同意落户证明
2015/06/19 职场文书
使用numpy nonzero 找出非0元素
2021/05/14 Python
win10如何更改appdata文件夹的默认位置?
2022/07/15 数码科技