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 24 Javascript
比较详细的关于javascript 解析json的代码
Dec 16 Javascript
Jquery事件的连接使用示例
Jun 18 Javascript
JS中把字符转成ASCII值的函数示例代码
Nov 21 Javascript
javascript复制粘贴与clipboardData的使用
Oct 16 Javascript
使用jquery动态加载js文件的方法
Dec 24 Javascript
chrome调试javascript详解
Oct 21 Javascript
Bootstrap每天必学之简单入门
Nov 19 Javascript
javascript瀑布流式图片懒加载实例解析与优化
Feb 23 Javascript
深入理解JS函数的参数(arguments)的使用
May 28 Javascript
总结Javascript中数组各种去重的方法
Oct 04 Javascript
基于React+Redux的SSR实现方法
Jul 03 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中操作MySQL数据库的一些要注意的问题
2006/10/09 PHP
php设计模式 Factory(工厂模式)
2011/06/26 PHP
PHP 简易输出CSV表格文件的方法详解
2013/06/20 PHP
php遍历类中包含的所有元素的方法
2015/05/12 PHP
WordPress中自定义后台管理界面配色方案的小技巧
2015/12/29 PHP
PHP实现图的邻接矩阵表示及几种简单遍历算法分析
2017/11/24 PHP
JavaScript具有类似Lambda表达式编程能力的代码(改进版)
2010/09/14 Javascript
php读取sqlite数据库入门实例代码
2014/06/25 Javascript
jQuery检测滚动条是否到达底部
2015/12/15 Javascript
基于MVC4+EasyUI的Web开发框架形成之旅之界面控件的使用
2015/12/16 Javascript
详解Node中导入模块require和import的区别
2017/08/11 Javascript
基于js中style.width与offsetWidth的区别(详解)
2017/11/12 Javascript
JS封装的模仿qq右下角消息弹窗功能示例
2018/08/22 Javascript
详解微信小程序用定时器实现倒计时效果
2019/04/30 Javascript
详解vue中的父子传值双向绑定及数据更新问题
2019/06/13 Javascript
vuex入门最详细整理
2020/03/04 Javascript
JavaScript中继承原理与用法实例入门
2020/05/09 Javascript
使用eslint和githooks统一前端风格的技巧
2020/07/29 Javascript
使用Python脚本将绝对url替换为相对url的教程
2015/04/24 Python
使用Python的Bottle框架写一个简单的服务接口的示例
2015/08/25 Python
Python通过TensorFLow进行线性模型训练原理与实现方法详解
2020/01/15 Python
django 装饰器 检测登录状态操作
2020/07/02 Python
利用PyQt5+Matplotlib 绘制静态/动态图的实现代码
2020/07/13 Python
python 实现的车牌识别项目
2021/01/25 Python
CSS3 选择器 伪类选择器介绍
2012/01/21 HTML / CSS
请用Java实现列出某个目录下的所有文件
2013/09/23 面试题
给客户的道歉信
2014/01/13 职场文书
最经典的大学生职业生涯规划范文
2014/03/05 职场文书
讲座主持词
2014/03/20 职场文书
政府信息公开实施方案
2014/05/09 职场文书
公司总经理岗位职责范本
2014/08/15 职场文书
课内比教学心得体会
2014/09/09 职场文书
领导欢迎词范文
2015/01/26 职场文书
教师节感想
2015/08/11 职场文书
中秋节作文(五年级)之关于月亮
2019/09/11 职场文书
springboot项目以jar包运行的操作方法
2021/06/30 Java/Android