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 相关文章推荐
刷新页面实现方式总结(HTML,ASP,JS)
Nov 13 Javascript
自制轻量级仿jQuery.boxy对话框插件代码
Oct 26 Javascript
SyntaxHighlighter语法高亮插件使用说明
Aug 14 Javascript
JS+CSS实现经典的左侧竖向滑动菜单效果
Sep 23 Javascript
JQuery选中select组件被选中的值方法
Mar 08 jQuery
Vue Router的懒加载路径的解决方法
Jun 21 Javascript
angular1.x ui-route传参的三种写法小结
Aug 31 Javascript
详解在vue-cli项目下简单使用mockjs模拟数据
Oct 19 Javascript
JavaScript实现简单计算器
Mar 19 Javascript
vue自定义标签和单页面多路由的实现代码
May 03 Javascript
Vue实现移动端拖拽交换位置
Jul 29 Javascript
Vue 请求传公共参数的操作
Jul 31 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下常用正则表达式整理
2010/10/26 PHP
PHP+MYSQL会员系统的开发实例教程
2014/08/23 PHP
php自定义apk安装包实例
2014/10/20 PHP
PHP加密技术的简单实现
2016/09/04 PHP
javascript function、指针及内置对象
2009/02/19 Javascript
JavaScript Event学习第九章 鼠标事件
2010/02/08 Javascript
JS限制Textarea文本域字符个数的具体实现
2013/08/02 Javascript
jquery实现的蓝色二级导航条效果代码
2015/08/24 Javascript
jquery使用on绑定a标签无效 只能用live解决
2016/06/02 Javascript
AngularJS中指令的四种基本形式实例分析
2016/11/22 Javascript
BootStrap树状图显示功能
2016/11/24 Javascript
Vue.js系列之项目结构说明(2)
2017/01/03 Javascript
React-intl 实现多语言的示例代码
2017/11/03 Javascript
angular实现input输入监听的示例
2018/08/31 Javascript
在小程序Canvas中使用measureText的方法示例
2018/10/19 Javascript
微信小程序实现选项卡效果
2018/11/06 Javascript
编写一个javascript元循环求值器的方法
2020/04/14 Javascript
ES5 模拟 ES6 的 Symbol 实现私有成员功能示例
2020/05/06 Javascript
jQuery弹框插件使用方法详解
2020/05/26 jQuery
nuxt 自定义 auth 中间件实现令牌的持久化操作
2020/11/05 Javascript
Python统计列表中的重复项出现的次数的方法
2014/08/18 Python
Python网站验证码识别
2016/01/25 Python
python单线程文件传输的实例(C/S)
2019/02/13 Python
在Python中append以及extend返回None的例子
2019/07/20 Python
Pytorch 计算误判率,计算准确率,计算召回率的例子
2020/01/18 Python
scrapy在python爬虫中搭建出错的解决方法
2020/11/22 Python
如何从一个文件档案的尾端新增记录
2016/12/02 面试题
应届生法律求职信
2013/10/22 职场文书
医学专业毕业生推荐信
2013/11/14 职场文书
优秀的毕业生的自我评价
2013/12/12 职场文书
小兵张嘎观后感
2015/06/03 职场文书
董存瑞观后感
2015/06/11 职场文书
贴吧吧主申请感言
2015/08/03 职场文书
社区宣传标语口号
2015/12/26 职场文书
利用Java设置Word文本框中的文字旋转方向的实现方法
2021/06/28 Java/Android
Windows server 2003卸载和安装IIS的图文教程
2022/07/15 Servers