8 行 Node.js 代码实现代理服务器

接触 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/

关键代码在路由处理方法内。

req.pipe(request(url)).pipe(res);

这个 pipe 方法很神奇,正如它的名字(管道)一样,它把浏览器的请求数据传给 request 客户端,然后将目标服务器的响应数据传回浏览器。这代码太TM简洁了!

那么,怎么实现科学上网呢?对,把代码放到没有网络封锁的服务器上运行,就OK了。比如,这个 任度搜 www.rendoso.com 背后就是 Google 代理。

欢迎拍(da)砖(shang)。

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,同时也希望多多支持我们!

(0)

相关推荐

  • Centos6.8下Node.js安装教程

    思路:采用编译好的文件进行安装 一 使用 wget 下载 到 Node.js 官网(https://nodejs.org/en/download/) 选择要下载的编译版本(Source Code),复制链接 cd /usr/local/src // 安装路径 wget https://nodejs.org/dist/v6.10.3/node-v6.10.3.tar.gz 二 解压缩文件包 tar xvf node-v6.10.3.tar.gz 三 node 环境配置 vim /etc/profi

  • Node.js v8.0.0正式发布!看看带来了哪些主要新特性

    前言 Node.js于5月30号在其官方博客上发布了Node.js v8.0.0.这一版本将成为当前的长期维护版本,从2017年10月开始到2019年12月31号.而Node.js v6.0.0将会在2018年4月进入维护模式,并于2019年4月结束. 最新发布的版本代号为Carbon,带来了很多重要的特性改进和一些全新的特性. 引入async_hooks模块 新引入实验性模块async_hooks(之前叫作async_wrap),它包含了一组用于诊断的API,开发人员可以用它监控Node.js

  • Windows8下搭建Node.js开发环境教程

    刚接触node.js,把一些过程记录下来,已备今后查阅.如果有不明确或者错误之处,欢迎批评指正.  Node.js是什么? 我看了网上一些文章,我的理解是功能类似于apache,可以理解为服务器端.但是实现的机制不一样,并发的效果很好,他的目标的取代Apache服务器机制. 好了,下面直接开始环境配置吧: 1,下载Node.js 直接去官网下载,http://www.nodejs.org/download/ 选择 Windows Installer (.msi) 版本 64 bit.这里会发现有

  • Node.js实现兼容IE789的文件上传进度条

    Nodejs对文件上传的处理 在Express4里req.files已经是undefined了:现在用的最多的可能就是formidable了,你知道了它有个progress事件,于是心中大喜,低版本IE的进度条有戏了:OK,试一下: form .on('error',function(err){ console.log(err); }) .on('aborted',function(){ console.log('aborted'); }) .on('progress',function(byt

  • windows8.1+iis8.5下安装node.js开发环境

    nodejs很久前就想玩玩,不过一直没时间,昨晚花了4个小时来捣鼓到iis上架设成功了,废话不说了. PS:我的系统是windows8.1 x64,所以自带iis8.5的,下载的文件也是x64的. No.1:下载文件 Nodejs http://www.nodejs.org/download/ iisnode https://github.com/tjanczuk/iisnode/wiki/iisnode-releases IIS URL Rewrite http://www.iis.net/d

  • 全面解析Node.js 8 重要功能和修复

    5月30日12点,Node.js 8正式发布了,这个版本具有一系列新功能和性能改进,并且这些功能和改进将获得长期支持(LTS). 下面就来介绍Node.js 8版本中最重要的功能和修复. 新版本的代号是Carbon.Node.js 8将从2017年10月起,正式成为当前的LTS版本,并持续到2019年12月31日.这也意味着Node.js 6版本将在2018年4月进入到维护模式,并在2019年4月结束维护支持. 下载Node.js 8版本:https://nodejs.org/download/

  • shell脚本转发80端口数据包给Node.js服务器

    注意:千万不要图省事直接使用ROOT用户运行Node.js服务!这将带来无法预计的安全问题!但是使用80端口作为HTTP默认端口这一习惯是从MS时代就延续至今的,怎么办呢?网上有人滔滔不绝地说用NginX做反向代理之类的,其实我觉得没必要这么夸张,只需要使用ROOT用户做一个普通端口与80端口的数据转发就好了,使用iptables语句如下: 复制代码 代码如下: iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-po

  • 8 行 Node.js 代码实现代理服务器

    接触 Node.js 已有多年,一直喜欢它的单线程模型和异步IO特性,以及 JavaScript 语言本身的灵活性.同时,JavaScript 前后端通吃,在全栈开发领域具有独特的优势.今天就来看看作为服务端语言的 JavaScript,完成一个简单的代理服务器功能是多么容易. 简单地说,代理服务器就是代理用户访问目标站点的中介服务器.作为前端开发人员,代理的常见用途是跨域访问后台 API.当然,还可以用来科学上网.今天要分享的代码,就是跟科学上网有关. 话不多说,先上 code: var ex

  • 40行原生js代码实现前端简易路由

    目录 前言 路由到底是一个什么东西? 实现一个 hashRouter historyRouter memoryRouter 最后做个总结 前言 在使用Vue或者是React 的路由的时候,不是很清楚他们的思路,导致在理解这些思想上出现了很多问题,于是自己实现了一个简易的原生js实现的前端路由,并整理了一下前端会遇到的集中路由模式和区别, 来帮助学习路由 路由到底是一个什么东西? 路由(routing)就是通过互联的网络把信息从源地址传输到目的地址的活动.路由发生在OSI网络参考模型中的第三层即网

  • Webpack 实现 Node.js 代码热替换

    这两天为了这个问题, Gitter 上问, Twitter 上问, GitHub 上问, 两天没反应 原来写博客的 jlongster 不理我, 我也不知道 Webpack 作者的联系方式 最后在 Gitter 上发的消息他似乎看到了, 就粗略地解释了一遍, 醍醐灌顶啊... https://github.com/webpack/docs/issues/45#issuecomment-149793458 Here is the process in short: Compile the serv

  • 教你用十行node.js代码读取docx的文本

    前言 最近有一个case.需要去解析word文档.有两个需求,一个是将word文档转成PDF,一个是将word文档中的内容按照一定的规范读取到数据库中,去npm仓库找了大概有十几个包,发现主要是通过以下的方式来转换代码. 通过调用系统底层程序(比如说office)的API来转换: 通过模板,替换数据来实现生成PDF: 通过有些免费将word转成PDF的网站来实现将word转成PDF,比如docx-to-pdf: 后来退而求其次,想通过先将docx转成文字,发现了个textract的包. 当然也有

  • 150行Node.js实现的dns代理工具

    工具地址:github.com/Yi-love/dns- 安装: npm install dns-proxy-server -g 这个我觉得应该还是挺实用的一个工具.开发过程中我们需要配置IP来访问测试环境域名. 使用电脑开发测试还好,直接使用Switch hosts! , 修改域名IP即可访问特定IP的域名网站. 那么如何在手机上也尽可能容易的访问到测试环境呢? 手机如何访问到内部网络特定IP域名? 手机要访问到测试环境的域名,我们需要做的就是建立一个代理服务,然后手机通过代理服务访问测试环境

  • 键盘上下键移动选择table表格行的js代码

    //这是要操作的表格: 这是第一行 这是第二行 这是第三行 这是第四行 //这是操作表格的代码 var rowNo= -1; var tableId = 'tb'; var inputId = 'show'; var selectedColor = "#FF0000" function document.onkeydown() { //事件的标识代码 if (event.keyCode == 38) { for(var k=0;k [Ctrl+A 全选 注:如需引入外部Js需刷新才能执

  • 在table中插入多行的js代码(与insertAdjacentHTML相似的功能)

    1 插入行 var num = 1; function addRow() { num ++; InsertRow(tableList," "+num+"新行 "); } function InsertRow(table,rowHtml) { var o=document.createElement("div"),ol; o.innerHTML=" "+rowHtml+" " ol=o.childNodes[

  • Node.js实用代码段之获取Buffer对象字节长度

    我们知道Node.js框架下的Buffer对象能够对二进制数据提供很好的支持,那么获取一个Buffer对象真实的字节长度则是必须要用到的功能了.Node.js框架为开发人员提供了一个Buffer.byteLength()方法,下面我们借助一个官方文档提供的例程向读者演示一下该方法的使用过程. 本例ch04.buffer-byteLength.js主要代码如下: /** * ch04.buffer-byteLength.js */ console.info("------Buffer.byteLe

  • Node.js实用代码段之正确拼接Buffer

    对于初学Node.js框架的开发人员来说,可能认为Buffer模块比较易学.重要性也不是那么突出.其实,Buffer模块在文件I/O和网络I/O中应用非常广泛,其处理二进制的性能比普通字符串性能要高出很多,重要性可谓是举足轻重.下面我们通过一个例程向读者演示一下,使用buf.concat()方法进行拼接的过程. 本例ch04.buffer-concat.js主要代码如下: /** * ch04.buffer-concat.js */ console.info("------ Buffer con

  • 我的Node.js学习之路(四)--单元测试

    通过NPM安装: npm install nodeunit -g 支持命令行,浏览器运行. 各种断言. 在node.js下模块化对于方法导出exports, 如果是对象导出module.exports,模块儿是单元测试的基础,看下面的node.js代码: var fs = require('fs'), global=require('./global.js'); var utils = { startWith: function(s1, s) { if (s == null || s == "&

随机推荐