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侧边栏随窗口滚动实现方法
Mar 04 Javascript
js中substr,substring,indexOf,lastIndexOf的用法小结
Dec 27 Javascript
Bootstrap4一次重大更新 几乎涉及每行代码
May 16 Javascript
jquery插件格式实例分析
Jun 16 Javascript
JS实现的多张图片轮流播放幻灯片效果
Jul 22 Javascript
Javascript学习之谈谈JS的全局变量跟局部变量(推荐)
Aug 28 Javascript
深入学习 JavaScript中的函数调用
Mar 23 Javascript
js 将canvas生成图片保存,或直接保存一张图片的实现方法
Jan 02 Javascript
NW.js 简介与使用方法
Feb 01 Javascript
JavaScript的查询机制LHS和RHS解析
Aug 16 Javascript
p5.js临摹动态图形的方法
Oct 23 Javascript
jquery实现上传文件进度条
Mar 26 jQuery
浅谈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/21 PHP
ThinkPHP模板标签eq if 中区分0,null,false的方法
2017/03/24 PHP
PHP pthreads v3使用中的一些坑和注意点分析
2020/02/21 PHP
Javascript实例教程(19) 使用HoTMetal(6)
2006/12/23 Javascript
javascript实现划词标记+划词搜索功能
2007/03/06 Javascript
找出字符串中出现次数最多的字母和出现次数精简版
2012/11/07 Javascript
JS前端框架关于重构的失败经验分享
2013/03/17 Javascript
Javascript访问器属性实例分析
2014/12/30 Javascript
vue resource post请求时遇到的坑
2017/10/19 Javascript
原生js+cookie实现购物车功能的方法分析
2017/12/21 Javascript
原生JS实现瀑布流插件
2018/02/06 Javascript
webpack4 css打包压缩问题的解决
2018/05/18 Javascript
JavaScript交换两个变量方法实例
2019/11/25 Javascript
[01:59]深扒TI7聊天轮盘语音出处 1
2017/05/11 DOTA
[54:47]Liquid vs VP Supermajor决赛 BO 第五场 6.10
2018/07/05 DOTA
[46:42]DOTA2-DPC中国联赛正赛 Aster vs Magma BO3 第二场 3月5日
2021/03/11 DOTA
举例讲解Python的Tornado框架实现数据可视化的教程
2015/05/02 Python
Python手机号码归属地查询代码
2016/05/04 Python
解决python3 urllib中urlopen报错的问题
2017/03/25 Python
使用Python自动化破解自定义字体混淆信息的方法实例
2019/02/13 Python
Python面向对象程序设计类的多态用法详解
2019/04/12 Python
python读写配置文件操作示例
2019/07/03 Python
使用Python opencv实现视频与图片的相互转换
2019/07/08 Python
pytorch多GPU并行运算的实现
2019/09/27 Python
tensorflow2.0与tensorflow1.0的性能区别介绍
2020/02/07 Python
如何使用python-opencv批量生成带噪点噪线的数字验证码
2020/12/21 Python
详解HTML5中的标签
2015/06/19 HTML / CSS
全天然狗零食:Best Bully Sticks
2016/09/22 全球购物
XD健身器材:Kevlar球、Crossfit健身球
2019/03/26 全球购物
客服端调用EJB对象的几个基本步骤
2012/01/15 面试题
财务会计实习报告体会
2013/12/20 职场文书
30年同学聚会感言
2014/01/30 职场文书
英语教学随笔感言
2014/02/20 职场文书
“向国旗敬礼”活动策划方案(4篇)
2014/09/27 职场文书
2014年高中班主任工作总结
2014/11/08 职场文书
单位婚育证明范本
2014/11/21 职场文书