调试线上代码的时候,我们经常遇到的一个问题就是 本地一套环境,线上一套环境,本地没有的文件用线上的这种需求。我简单来说下使用nodejs如何做到。

先说下不用nodejs我们怎么做,工具比如fiddler,代理服务器比如nproxy之类都可以完成。但是很麻烦啊,要配置规则还要安装工具,改代理端口之类的,好麻烦,或者用apache或者nginx编写复杂的rewrite规则,apache下还要写抓反向代理的脚本等等。。好麻烦。

所以今天分享一下我在项目中是如何解决的。

首先,你本地需要有一个server。

我选择node-static这个包,很快速的就完成了一个本地server的配置,看代码或者官方文档吧。

var nodeStatic = require('node-static').Server;
var request = require("request");
var dns = require("dns");
var fileServer = new nodeStatic("./");
var http = require("http"); var httpServer = http.createServer(function(req, res) {
req.addListener('end', function() {
fileServer.serve(req, res, function(err, result) {
if (err && (err.status === 404)) {
//本地没有文件访问线上,透明server
dns.resolve4(req.headers.host,function(err,addresses){
if(err){
res.writeHeader(200,'text/html');
res.write(req.url);
res.end(err);
}else{
var ip = addresses[0];
var p = 'http://'+ip+req.url;
req.headers['Host'] = req.headers.host;
request({
method:req.method,
url:p,
headers:req.headers
}).pipe(res);
}
});
}
});
}).resume();
}); httpServer.listen(1314);

简单解释一下上面的代码吧,是从我一个项目里摘出来的。

首先node-static和http建立了一个本地的http server,然后在当文件本地不存在时,使用dns模块和request模块,来进行反向代理线上资源。

dns模块可以根据host查找到线上地址的ip,然后使用request直接访问ip,伪造headers,来请求真实资源,资源拿到之后pipe到res中返回即可。

其实nginx和apache也是这么干的~拿nodejs做起来就是这么简单。

mark一篇文章--用nodejs搭建一个本地反向代理环境的更多相关文章

  1. nodeJS搭建一个简单的(代理)web服务器

    前端获取数据时经常遇见跨域问题,以前一直用nginx做反向代理.最近在用vuejs,发现webpack-dev-server的代理简单好用.于是仿照写了一个简单的web服务器,用于非webpack的项 ...

  2. 用nodejs搭建一个简单的服务器

    使用nodejs搭建一个简单的服务器 nodejs优点:性能高(读写文件) 数据操作能力强 官网:www.nodejs.org 验证是否安装成功:cmd命令行中输入node -v 如果显示版本号表示安 ...

  3. 从零开始,在windows上用nodejs搭建一个静态文件服务器

    从零开始,在windows上用nodejs搭建一个静态文件服务器 首先安装nodejs: 新建一个node文件夹 下载node.exe到该文件夹 下载npm然后解压到该文件夹 现在node文件夹是这样 ...

  4. 快速搭建一个本地的FTP服务器

    快速搭建一个本地的FTP服务器   如果需要开发FTP文件上传下载功能,那么需要在本机上搭建一个本地FTP服务器,方便调试. 第一步:配置IIS Web服务器 1.1 控制面板中找到"程序& ...

  5. 利用 nodeJS 搭建一个简单的Web服务器(转)

    下面的代码演示如何利用 nodeJS 搭建一个简单的Web服务器: 1. 文件 WebServer.js: //-------------------------------------------- ...

  6. 快速搭建一个本地的FTP服务器 win10及win7

    快速搭建一个本地的FTP服务器   如果需要开发FTP文件上传下载功能,那么需要在本机上搭建一个本地FTP服务器,方便调试. (win10) 第一步:配置IIS Web服务器 1.1 控制面板中找到“ ...

  7. Git: 搭建一个本地私人仓库

    Git: 搭建一个本地私人仓库 寝室放个电脑.实验室也有个电脑 为进行数据同步,充分利用实验室的服务器搭建了个本地私人仓库 1. 安装流程 当然首先保证服务器上与PC机上都已经安装了可用的Git 在P ...

  8. Docker学习笔记之一,搭建一个JAVA Tomcat运行环境

    Docker学习笔记之一,搭建一个JAVA Tomcat运行环境 前言 Docker旨在提供一种应用程序的自动化部署解决方案,在 Linux 系统上迅速创建一个容器(轻量级虚拟机)并部署和运行应用程序 ...

  9. Docker学习笔记之一,搭建一个JAVA Tomcat运行环境(转)

    前言 Docker旨在提供一种应用程序的自动化部署解决方案,在 Linux 系统上迅速创建一个容器(轻量级虚拟机)并部署和运行应用程序,并通过配置文件可以轻松实现应用程序的自动化安装.部署和升级,非常 ...

随机推荐

  1. Balancing Symbols

    symbols匹配问题 #include<iostream> #include<string> using namespace std; struct Node { char ...

  2. js获取不同浏览器盒子宽度高度

    DTD 已声明 IE document.documentElement.scrollHeight 浏览器所有内容高 度 ,document.body.scrollHeight 浏览器所有内容高度 do ...

  3. C#中的Virtual、Override和new关键词理解

    来源:http://blog.csdn.net/jackiezhw/article/details/2673992 在 C# 中,派生类可以包含与基类方法同名的方法. 基类方法必须定义为 virtua ...

  4. Inno Setup入门(八)——有选择性的安装文件

    这主要使用[Components]段实现,一个演示的代码如下: [setup] ;全局设置,本段必须 AppName=Test AppVerName=TEST DefaultDirName=" ...

  5. Validation of viewstate MAC failed machinekey生成、使用方法

    前段时间公司为了减轻服务器压力,对网页做了集群,分布在多台服务器,通过DNS轮回解析到各台服务器,结果页面只要打开停留到DNS解析到下一个地址,就会出现出下错误信息. Validation of vi ...

  6. MyEclipse 2015 如何使项目能够使用 Hibernate自动生成文件

    在MyEclipse-Project facets 下 对hibernate这一栏打钩即可

  7. jquery 限制字数 显示输入字数 插件

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  8. XCode: duplicate symbol

    XCode: duplicate symbol 2013-05-27 17:28:21|  分类: iOS|字号 订阅     遇到引用库重复定义的问题,需要解决.   项目需要,同时引用ZBar和Q ...

  9. java int和Integer的区别

    今天偶然和同学讨论到int和Integer的区别是,发现自己对这个问题了解的并不是很清楚,而且有些概念还是错的,所以在这对int和Integer的区别做一个总结. int与integer的区别从大的方 ...

  10. HttpURLConnection请求网络数据的GET请求

    //清单文件中添加权限 <uses-permission android:name="android.permission.INTERNET"/> new Thread ...