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 相关文章推荐
Js 获取Gridview选中行的内容操作步骤
Feb 05 Javascript
原生javaScript做得动态表格(注释写的很清楚)
Dec 29 Javascript
兼容IE、firefox以及chrome的js获取时间(getFullYear)
Jul 04 Javascript
解决JavaScript数字精度丢失问题的方法
Dec 03 Javascript
jQuery ajax中使用confirm,确认是否删除的简单实例
Jun 17 Javascript
Javascript将双字节字符转换成单字节字符并计算长度
Jun 22 Javascript
从零学习node.js之mysql数据库的操作(五)
Feb 24 Javascript
Angular 4依赖注入学习教程之ClassProvider的使用(三)
Jun 04 Javascript
React如何将组件渲染到指定DOM节点详解
Sep 08 Javascript
zTree节点文字过多的处理方法
Nov 24 Javascript
vue实现动态添加数据滚动条自动滚动到底部的示例代码
Jul 06 Javascript
基于canvasJS在PHP中制作动态图表
May 30 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个人网站架设连环讲(四)
2006/10/09 PHP
PHP版自动生成文章摘要
2008/07/23 PHP
php文件上传表单摘自drupal的代码
2011/02/15 PHP
mcrypt启用 加密以及解密过程详细解析
2013/08/07 PHP
PHP函数按引用传递参数及函数可选参数用法示例
2018/06/04 PHP
laravel框架使用阿里云短信发送消息操作示例
2020/02/15 PHP
限制文本字节数js代码
2007/03/06 Javascript
js正则表达式的使用详解
2013/07/09 Javascript
javaScript如何处理从java后台返回的list
2014/04/24 Javascript
javascript实现的固定位置悬浮窗口实例
2015/04/30 Javascript
easyui Droppable组件实现放置特效
2015/08/19 Javascript
详解Matlab中 sort 函数用法
2016/03/20 Javascript
jQuery+ajax实现滚动到页面底部自动加载图文列表效果(类似图片懒加载)
2016/06/07 Javascript
AngularJS使用ng-inlude指令加载页面失败的原因与解决方法
2017/01/19 Javascript
javascript ES6中箭头函数注意细节小结
2017/02/17 Javascript
javascript 面向对象function详解及实例代码
2017/02/28 Javascript
vue mixins组件复用的几种方式(小结)
2017/09/06 Javascript
Angular4 ElementRef的应用
2018/02/26 Javascript
vue.js实现的经典计算器/科学计算器功能示例
2018/07/11 Javascript
对angularJs中controller控制器scope父子集作用域的实例讲解
2018/10/08 Javascript
jQuery使用$.extend(true,object1, object2);实现深拷贝对象的方法分析
2019/03/06 jQuery
layui表格 返回的数据状态异常的解决方法
2019/09/10 Javascript
vue中watch和computed为什么能监听到数据的改变以及不同之处
2019/12/27 Javascript
JS数组进阶示例【数组的几种函数用法】
2020/01/16 Javascript
Python 运行 shell 获取输出结果的实例
2019/01/07 Python
python的time模块和datetime模块实例解析
2019/11/29 Python
Java和Javasciprt的区别
2012/09/02 面试题
EJB3推出JPA的原因
2013/10/16 面试题
《故都的秋》教学反思
2014/04/15 职场文书
火箭队口号
2014/06/18 职场文书
党员批评与自我批评发言
2014/10/02 职场文书
海南召开党的群众路线教育实践活动总结大会新闻稿
2014/10/21 职场文书
大学生学习新党章思想汇报
2014/10/25 职场文书
2014年体育教学工作总结
2014/12/09 职场文书
2016年父亲节寄语
2015/12/04 职场文书
《王者天下》第4季首话新剧照 4月9日正式开播
2022/04/07 日漫