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实例代码
Dec 18 Javascript
js点击事件链接的问题解决
Apr 25 Javascript
JavaScript判断表单提交时哪个radio按钮被选中的方法
Mar 21 Javascript
jquery中ajax跨域方法实例分析
Dec 18 Javascript
浅析Javascript中bind()方法的使用与实现
May 30 Javascript
Jquery组件easyUi实现表单验证示例
Aug 23 Javascript
JavaScript防止全局变量污染的方法总结
Aug 02 Javascript
vue  elementUI 表单嵌套验证的实例代码
Nov 06 Javascript
Vue+ElementUI table实现表格分页
Dec 14 Javascript
JS实现省市县三级下拉联动
Apr 10 Javascript
vue 实现动态路由的方法
Jul 06 Javascript
js实现模拟购物商城案例
May 18 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无限分类(树形类)的深入分析
2013/06/02 PHP
PHP延迟静态绑定示例分享
2014/06/22 PHP
php中函数前加&符号的作用分解
2014/07/08 PHP
php生成rss类用法实例
2015/04/14 PHP
简单的自定义php模板引擎
2016/08/26 PHP
基于prototype扩展的JavaScript常用函数库
2010/11/30 Javascript
javascript jscroll模拟html元素滚动条
2012/12/18 Javascript
jQuery焦点图切换特效插件封装实例
2013/08/18 Javascript
使用jQuery插件创建常规模态窗口登陆效果
2013/08/23 Javascript
js实现倒计时时钟的示例代码
2013/12/17 Javascript
jquery实现checkbox全选全不选的简单实例
2013/12/31 Javascript
js日期范围初始化得到前一个月日期的方法
2015/05/05 Javascript
JavaScript处理解析JSON数据过程详解
2015/09/11 Javascript
webpack 2.x配置reactjs基本开发环境详解
2017/08/08 Javascript
用Vue.extend构建消息提示组件的方法实例
2017/08/08 Javascript
View.post() 不靠谱的地方你知道多少
2017/08/29 Javascript
微信小程序 checkbox使用实例解析
2019/09/09 Javascript
vue实现二级导航栏效果
2019/10/19 Javascript
Vue如何实现变量表达式选择器
2021/02/18 Vue.js
[01:00:04]DOTA2上海特级锦标赛B组小组赛#1 Alliance VS Spirit第二局
2016/02/26 DOTA
[01:08:33]OG vs VGJ.T 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
浅谈Python2获取中文文件名的编码问题
2018/01/09 Python
基于PyQt4和PySide实现输入对话框效果
2019/02/27 Python
libreoffice python 操作word及excel文档的方法
2019/07/04 Python
Python 高效编程技巧分享
2020/09/10 Python
目前不被任何主流浏览器支持的CSS3属性汇总
2014/07/21 HTML / CSS
高中生学习生活的自我评价
2013/10/09 职场文书
专业实习自我鉴定
2013/10/29 职场文书
教育学专业实习生的自我鉴定
2013/11/26 职场文书
小学生中国梦演讲稿
2014/04/23 职场文书
小学语文教师研修日志
2015/11/13 职场文书
用Python简陋模拟n阶魔方
2021/04/17 Python
用python开发一款操作MySQL的小工具
2021/05/12 Python
MySQL数据库超时设置配置的方法实例
2021/10/15 MySQL
springboot新建项目pom.xml文件第一行报错的解决
2022/01/18 Java/Android
详解NumPy中的线性关系与数据修剪压缩
2022/05/25 Python