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 相关文章推荐
关于event.cancelBubble和event.stopPropagation()的区别介绍
Dec 11 Javascript
可在线编辑网页文字效果代码(单击)
Mar 02 Javascript
基于JavaScript实现 获取鼠标点击位置坐标的方法
Apr 12 Javascript
Bootstrap table右键功能实现方法
Feb 20 Javascript
性能优化之代码优化页面加载速度
Mar 01 Javascript
jquery动态赋值id与动态取id方法示例
Aug 21 jQuery
Vuex 入门教程
Jan 10 Javascript
vue2.0 下拉框默认标题设置方法
Aug 22 Javascript
JavaScript 高性能数组去重的方法
Sep 20 Javascript
点击按钮弹出模态框的一系列操作代码实例
Mar 29 Javascript
javascript实现前端成语点击验证
Jun 24 Javascript
vue-video-player 断点续播的实现
Feb 01 Vue.js
浅谈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中可能用来加密字符串的函数[base64_encode、urlencode、sha1]
2012/01/16 PHP
PHP连接数据库实现注册页面的增删改查操作
2016/03/27 PHP
利用PHP判断文件是否为图片的方法总结
2017/01/06 PHP
PHP数组对象与Json转换操作实例分析
2019/10/22 PHP
jQuery 学习第六课 实现一个Ajax的TreeView
2010/05/17 Javascript
Javascript图像处理—平滑处理实现原理
2012/12/28 Javascript
JS常见问题整理(持续更新)
2013/08/06 Javascript
jquery模拟LCD 时钟的html文件源代码
2014/06/16 Javascript
JavaScript实现N皇后问题算法谜题解答
2014/12/29 Javascript
JQuery中DOM事件冒泡实例分析
2015/06/13 Javascript
js组件SlotMachine实现图片切换效果制作抽奖系统
2016/04/17 Javascript
AngularJS 执行流程详细介绍
2016/08/18 Javascript
Node.js调试技术总结分享
2017/03/12 Javascript
webpack打包单页面如何引用的js
2017/06/07 Javascript
layui输入框中只允许输入整数的实现方法
2019/09/18 Javascript
Vue可自定义tab组件用法实例
2019/10/24 Javascript
解决angular 使用原生拖拽页面卡顿及表单控件输入延迟问题
2020/04/21 Javascript
微信小程序弹窗禁止页面滚动的实现代码
2020/12/30 Javascript
[02:57]DOTA2亚洲邀请赛 SECRET战队出场宣传片
2015/02/07 DOTA
[02:19]DOTA2上海特级锦标赛 观赛指南 Spectator Guide
2016/02/04 DOTA
[05:03]2018DOTA2亚洲邀请赛主赛事首日回顾
2018/04/04 DOTA
使用Python实现一个简单的项目监控
2015/03/31 Python
Python找出9个连续的空闲端口
2016/02/01 Python
对python创建及引用动态变量名的示例讲解
2018/11/10 Python
torchxrayvision包安装过程(附pytorch1.6cpu版安装)
2020/08/26 Python
Python3获取cookie常用三种方案
2020/10/05 Python
应届实习生的自我评价范文
2014/01/05 职场文书
会计职业生涯规划书
2014/01/13 职场文书
《北大荒的秋天》教学反思
2014/04/14 职场文书
工伤事故赔偿协议书
2014/04/15 职场文书
社区爱国卫生月活动总结
2014/06/30 职场文书
客户答谢会活动方案
2014/08/31 职场文书
十八大宣传标语
2014/10/09 职场文书
laravel ajax curd 搜索登录判断功能的实现
2021/04/17 PHP
Oracle 区块链表创建过程详解
2021/05/15 Oracle
德劲DE1102数字调谐收音机机评
2022/04/07 无线电