mark一篇文章--用nodejs搭建一个本地反向代理环境
调试线上代码的时候,我们经常遇到的一个问题就是 本地一套环境,线上一套环境,本地没有的文件用线上的这种需求。我简单来说下使用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搭建一个本地反向代理环境的更多相关文章
- nodeJS搭建一个简单的(代理)web服务器
前端获取数据时经常遇见跨域问题,以前一直用nginx做反向代理.最近在用vuejs,发现webpack-dev-server的代理简单好用.于是仿照写了一个简单的web服务器,用于非webpack的项 ...
- 用nodejs搭建一个简单的服务器
使用nodejs搭建一个简单的服务器 nodejs优点:性能高(读写文件) 数据操作能力强 官网:www.nodejs.org 验证是否安装成功:cmd命令行中输入node -v 如果显示版本号表示安 ...
- 从零开始,在windows上用nodejs搭建一个静态文件服务器
从零开始,在windows上用nodejs搭建一个静态文件服务器 首先安装nodejs: 新建一个node文件夹 下载node.exe到该文件夹 下载npm然后解压到该文件夹 现在node文件夹是这样 ...
- 快速搭建一个本地的FTP服务器
快速搭建一个本地的FTP服务器 如果需要开发FTP文件上传下载功能,那么需要在本机上搭建一个本地FTP服务器,方便调试. 第一步:配置IIS Web服务器 1.1 控制面板中找到"程序& ...
- 利用 nodeJS 搭建一个简单的Web服务器(转)
下面的代码演示如何利用 nodeJS 搭建一个简单的Web服务器: 1. 文件 WebServer.js: //-------------------------------------------- ...
- 快速搭建一个本地的FTP服务器 win10及win7
快速搭建一个本地的FTP服务器 如果需要开发FTP文件上传下载功能,那么需要在本机上搭建一个本地FTP服务器,方便调试. (win10) 第一步:配置IIS Web服务器 1.1 控制面板中找到“ ...
- Git: 搭建一个本地私人仓库
Git: 搭建一个本地私人仓库 寝室放个电脑.实验室也有个电脑 为进行数据同步,充分利用实验室的服务器搭建了个本地私人仓库 1. 安装流程 当然首先保证服务器上与PC机上都已经安装了可用的Git 在P ...
- Docker学习笔记之一,搭建一个JAVA Tomcat运行环境
Docker学习笔记之一,搭建一个JAVA Tomcat运行环境 前言 Docker旨在提供一种应用程序的自动化部署解决方案,在 Linux 系统上迅速创建一个容器(轻量级虚拟机)并部署和运行应用程序 ...
- Docker学习笔记之一,搭建一个JAVA Tomcat运行环境(转)
前言 Docker旨在提供一种应用程序的自动化部署解决方案,在 Linux 系统上迅速创建一个容器(轻量级虚拟机)并部署和运行应用程序,并通过配置文件可以轻松实现应用程序的自动化安装.部署和升级,非常 ...
随机推荐
- UICollectController
九宫格 UICollectController 1.新建一个xib描述cell 2.注册xib 3.collectionView显示cell *必须设置数据源(和代理并遵守协议) *实现数据源和代理的 ...
- HttpCookie类
转自:http://www.cnblogs.com/kissdodog/archive/2013/01/08/2851937.html HttpCookie类专门由C#用于读取和写入Cookie的类. ...
- eclipse配置tomcat及修改tomcat默认根目录
1.安装eclipse for j2ee和tomcat: 2.下载tomcat对eclipse的插件:http://www.eclipsetotale.com/tomcatPlugin.html 下载 ...
- OC与Swift桥接问题
入职新公司后,接手了一个Swift项目.项目质量已经吐槽过一次就略过了,感兴趣的可以看我之前的博客.当然我之前对Swift只是略有了解,略到只看过没写过的程度,主要语言还是OC.不过嘛其实语言都是相通 ...
- OpenGL ES之glUniform函数
函数名: glUniform 功能: 为当前程序对象指定Uniform变量的值.(译者注:注意,由于OpenGL ES由C语言编写,但是C语言不支持函数的重载,所以会有很多名字相同后缀不同的函数版本存 ...
- ABI & API
API defines the programning language and function entry point, arguments type, order. ABI defines th ...
- Swift 与 JSON 数据 浅析
转载自:http://www.cnblogs.com/theswiftworld/p/4660177.html 我们大家平时在开发 App 的时候,相信接触最多的就是 JSON 数据了.只要你的 Ap ...
- iOS 开发之照片框架详解之二 —— PhotoKit 详解(下)
本文链接:http://kayosite.com/ios-development-and-detail-of-photo-framework-part-three.html 这里接着前文<iOS ...
- linux C++通过ntp协议获取网络时间
转自:http://blog.csdn.net/ccjjyy/article/details/42871993 #include <stdio.h> #include <sys/ty ...
- Android.mk与jni目录的关系
附1: Android.mk与jni目录的关系: 在某目录下,如/src/modules1/下存放Android.mk和Application.mk,调用ndk-build试图编译时,会遇到如下错误: ...