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 相关文章推荐
两个SUBMIT按钮,如何区分处理
Aug 22 Javascript
JavaScript为对象原型prototype添加属性的两种方式
Aug 01 Javascript
IE8提示Invalid procedure call or argument 异常的解决方法
Sep 30 Javascript
可兼容IE的获取及设置cookie的jquery.cookie函数方法
Sep 02 Javascript
使用Node.js实现一个简单的FastCGI服务器实例
Jun 09 Javascript
js实现网页随机切换背景图片的方法
Nov 01 Javascript
Bootstrap 折叠(Collapse)插件用法实例详解
Jun 01 Javascript
jQuery模拟完美实现经典FLASH导航动画效果【附demo源码下载】
Nov 09 Javascript
详解vue-cli 脚手架项目-package.json
Jul 04 Javascript
基于javascript 显式转换与隐式转换(详解)
Dec 15 Javascript
JS实现的哈夫曼编码示例【原始版与修改版】
Apr 22 Javascript
详解JavaScript 事件流
Sep 02 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网站备份程序代码分享
2011/06/10 PHP
PHP生成指定长度随机数最简洁的方法
2014/07/14 PHP
wordpress安装过程中遇到中文乱码的处理方法
2015/04/21 PHP
php版微信公众平台之微信网页登陆授权示例
2016/09/23 PHP
多个Laravel项目如何共用migrations详解
2018/09/25 PHP
jQuery 加上最后自己的验证
2009/11/04 Javascript
JavaScript 语法集锦 脚本之家基础推荐
2009/11/15 Javascript
简单几行JS Code实现IE邮件转发新浪微博
2013/07/03 Javascript
javascript中的document.open()方法使用介绍
2013/10/09 Javascript
js函数返回多个返回值的示例代码
2013/11/05 Javascript
学习JavaScript设计模式之模板方法模式
2016/01/20 Javascript
JS从数组中随机取出几个数组元素的方法
2016/08/02 Javascript
jquery实现异步加载图片(懒加载图片一种方式)
2017/04/24 jQuery
JS实现汉字与Unicode码相互转换的方法详解
2017/04/28 Javascript
学习使用Bootstrap输入框、导航、分页等常用组件
2017/05/11 Javascript
详解Chart.js轻量级图表库的使用经验
2018/05/22 Javascript
jQuery实现仿京东防抖动菜单效果示例
2018/07/06 jQuery
详解JavaScript 中 if / if...else...替换方式
2018/07/15 Javascript
Node.js 多进程处理CPU密集任务的实现
2019/05/26 Javascript
layui监听select变化,以及设置radio选中的方法
2019/09/24 Javascript
原生JavaScript实现换肤
2021/02/19 Javascript
python翻译软件实现代码(使用google api完成)
2013/11/26 Python
Python入门篇之数字
2014/10/20 Python
Python找出文件中使用率最高的汉字实例详解
2015/06/03 Python
自动化Nginx服务器的反向代理的配置方法
2015/06/28 Python
Python2.7基于淘宝接口获取IP地址所在地理位置的方法【测试可用】
2017/06/07 Python
Python探索之ModelForm代码详解
2017/10/26 Python
python读取csv文件并把文件放入一个list中的实例讲解
2018/04/27 Python
python3中rank函数的用法
2019/11/27 Python
零基础小白多久能学会python
2020/06/22 Python
使用CSS3实现SVG路径描边动画效果入门教程
2019/10/21 HTML / CSS
澳大利亚美容产品及化妆品在线:Activeskin
2020/06/03 全球购物
房地产员工找工作的自我评价
2013/11/15 职场文书
体育专业大学生职业生涯规划范文:打造自己的运动帝国
2014/09/12 职场文书
Python中的turtle画箭头,矩形,五角星
2022/03/16 Python
基于Android10渲染Surface的创建过程
2022/08/14 Java/Android