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带点自动图片轮播幻灯片特效代码分享
Sep 07 Javascript
浅谈JavaScript前端开发的MVC结构与MVVM结构
Jun 03 Javascript
深入理解JavaScript单体内置对象
Jun 06 Javascript
Bootstrap的基本应用要点浅析
Dec 19 Javascript
vue-cli的webpack模板项目配置文件分析
Apr 01 Javascript
Node+Express+MongoDB实现登录注册功能实例
Apr 23 Javascript
jQuery Validate 无法验证 chosen-select元素的解决方法
May 17 jQuery
vue脚手架vue-cli的学习使用教程
Jun 06 Javascript
Vue加载json文件的方法简单示例
Jan 28 Javascript
基于mpvue小程序使用echarts画折线图的方法示例
Apr 24 Javascript
利用Angular7开发一个Radio组件的全过程
Jul 11 Javascript
解决vue 使用setTimeout,离开当前路由setTimeout未销毁的问题
Jul 21 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写入数据到CSV文件的方法
2015/03/14 PHP
源码分析 Laravel 重复执行同一个队列任务的原因
2017/12/25 PHP
PHP加MySQL消息队列深入理解
2021/02/27 PHP
Ajax,UTF-8还是GB2312 eval 还是execScript
2008/11/13 Javascript
利用js读取动态网站从服务器端返回的数据
2014/02/10 Javascript
改变状态栏文字的js代码
2014/06/13 Javascript
javascript快速排序算法详解
2014/09/17 Javascript
JavaScript中string转换成number介绍
2014/12/31 Javascript
JS控制表单提交的方法
2015/07/09 Javascript
基于jQuery实现的美观星级评论打分组件代码
2015/10/30 Javascript
node.js实现端口转发
2016/04/14 Javascript
JS组件Bootstrap实现图片轮播效果
2016/05/16 Javascript
原生JavaScript制作计算器
2016/10/16 Javascript
JavaScript实现简单的树形菜单效果
2017/06/23 Javascript
浅谈ElementUI中switch回调函数change的参数问题
2018/08/24 Javascript
vue如何解决循环引用组件报错的问题
2018/09/22 Javascript
深入浅析js原型链和vue构造函数
2018/10/25 Javascript
[00:43]FTP典藏礼包 DOTA2三大英雄霸气新套装
2014/03/21 DOTA
[56:48]FNATIC vs EG 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
跟老齐学Python之Python安装
2014/09/12 Python
Python使用pygame模块编写俄罗斯方块游戏的代码实例
2015/12/08 Python
Python matplotlib学习笔记之坐标轴范围
2019/06/28 Python
Python解析json时提示“string indices must be integers”问题解决方法
2019/07/31 Python
Python threading的使用方法解析
2019/08/28 Python
Python @property原理解析和用法实例
2020/02/11 Python
Python双链表原理与实现方法详解
2020/02/22 Python
全网最细 Python 格式化输出用法讲解(推荐)
2021/01/18 Python
小学新学期教师寄语
2014/01/18 职场文书
教学器材管理制度
2014/01/26 职场文书
作文评语集锦
2014/12/25 职场文书
学期个人自我总结
2015/02/13 职场文书
爱国主义影片观后感
2015/06/18 职场文书
篮球赛新闻稿
2015/07/17 职场文书
普希金诗歌赏析(6首)
2019/08/22 职场文书
go使用Gin框架利用阿里云实现短信验证码功能
2021/08/04 Golang
JS 4个超级实用的小技巧 提升开发效率
2021/10/05 Javascript