imitator

一个简单易用的 nodejs 服务器, 主要用于模拟 HTTP 接口数据, 请求代理与转发 。
使用imitator,可以解决前后端分离开发中的痛点之一:数据模拟,也可以作为代理服务器与静态资源服务器使用。

为什么会有 imitator?

前后端开发协作的过程中,为了不依赖于后端环境,我们常常会和后端童鞋定好接口,然后采用前后端分离的开发模式。
但是这样的模式,需要前端自己来实现接口数据的模拟。通常使用 nginx 可以满足我们绝大部分场景的需求了。
但是,nginx 的配置文件相对前端同学来说还是不够友好,而且有些个性的接口格式无法满足。
imitator 使用 nodejs 并基于 express.js 实现, 配置文件相当简单, 而且易于订制,前端同学使用起来非常顺手。

快速上手

  1. 安装——首先你要先安装 nodejs 和 npm, 然后全局安装imitator。

    npm install imitator -g
    
  2. 编写配置文件——在你的用户目录(比如我的是/User/hanan)下新建一个名为 Imitatorfile.js 的文件(这是 imitator 的默认配置文件), 内容如下。

    module.exports = function(imitator) {// 返回一个jsonimitator('/json', {name: 'hello world'});
    }
    
  3. 启动服务——命令行输入以下命令,启动 imitator server.

    imitator
    
  4. 浏览器访问 127.0.0.1:8888/json , 将会看到:

    {"name":"hello world"}
    

命令行参数

imitator 命令接受2参数:

-p 设置 imitator server 的端口号,默认是8888。

-f 设置配置文件的路径,支持相对路径和绝对路径,默认为:用户目录/Imitatorfile.js 。

下面的命令将使用 9000 端口, /home/myconfig.js 这个文件作为配置文件来启动 imitator server 。

imitator -p 9000 -f /home/myconfig.js

配置文件

imitator 的配置文件是其实就是一个 nodejs 模块, module.exports 是一个函数,接受一个参数:imitator 。 通过调用 imitator(option) 来设置一条规则。
其中 option 是规则的参数对象。如:

module.exports = function(imitator) {imitator({url: '/json',   // 匹配的urlresult: {name: 'json test'} // 返回的内容});
}

如上,当请求地址匹配到 /json 这个路径的时候,就会返回 {name: 'json test'} 的json字符串。

当 option 中只包含 url,result 两个参数时,可以简写成 imitator(url, result) 的形式,上面的例子可以写成:

module.exports = function(imitator) {imitator('/json', {name: 'json test'});
}

规则参数(option)

配置文件中可以通过 imitator(option) 来制定一条规则,其中参数对象包含以下属性:

option.url

必填,设置请求的匹配模式,支持正则。如:

module.exports = function(imitator) {imitator({url: '/json',……});imitator({url: /\/\d{1,3}/,  // 支持正则……});
}

option.result

必填,设置请求的返回内容,如果是一个 object 或者 array,将会被 JSON.stringify 后返回;如果是一个 function,将会接受 req 和 res 两个参数执行,可用于实现一些个性化的返回内容。如:

module.exports = function(imitator) {imitator({……result: 'my result',  //普通字符串});imitator({……result: {name: 'json test'}, //json});imitator({……result: function (req, res) {  // 自定义内容if (req.param.name === 'hanan') {res.send('中年痴呆症患者');}else {res.send('i do not know .');}},});
}

option.type

设置通过 mime.lookup() 转化的 Content-Type HTTP header。如:

module.exports = function(imitator) {imitator({……type: 'json',  ==> 'application/json'……});imitator({……type: 'html',  ==> 'text/html'……});}

option.headers

设置 HTTP header。如:

module.exports = function(imitator) {imitator({……headers: {myheadername: 'myheader value'}……});}

option.cookies

设置 cookie,如:

module.exports = function(imitator) {imitator({……cookies: [{name: 'myname', value: 'hanan', maxAge: 900000, httpOnly: true}]……});}

option.timeout

设置请求响应的延时时间,单位为毫秒,如:

 module.exports = function(imitator) {imitator({……timeout: 1000……});}

HTTP代理

通过 imitator.base() 可以将规则之外的请求,转发到其他的服务器上。这样可以在实现接口模拟的同时,使用其他服务器的返回内容。如:

module.exports = function(imitator) {// 这里是各种规则========imitator(……);imitator(……);imitator(……);// 没有命中规则的请求, 转发到192.168.8.8:9000下imitator.base('http://192.168.8.8:9000');
}

静态目录

通过 imitator.static(url, path) 可以设置静态文件目录。 url 为匹配的请求地址,支持正则;path 为静态文件的目录,路径相对于配置文件。如:

module.exports = function(imitator) {imitator.static('static', './public');
}

读取文件内容

通过 imitator.file(filePath) 可以读取文件内容,filePath是文件路径,相对于配置文件。如:

module.exports = function(imitator) {// 当请求匹配到 /file 时 ,返回文件 ./myfile.txt 的内容imitator('/file', imitator.file('./myfile.txt'));
}

配置文件(Imitatorfile.js)参考

详见:https://github.com/hanan198501/imitator/blob/master/test/Imitatorfile....

使用 imitator 实现前后端分离开发中的数据模拟与静态资源映射相关推荐

  1. SpringCloud微服务前后端分离开发中出现的弱智问题之(不支持当前请求方法)

    SpringCloud微服务前后端分离开发中出现的弱智问题之(不支持当前请求方法) 问题背景 问题解决 为什么说这是一个弱智问题,因为这多是编写代码不仔细造成的. 问题背景 当当后台API发布的接口与 ...

  2. 前后端分离项目token怎么验证_微信端前后端分离开发中token验证和数据的获取...

    微信端前后分离开发中,授权认证,获取token和openid是必不可少的一步. 我们的思路是,每次调用接口前,判断cookie里面是否有token和openid,没有的话判断url参数中是否存在,没有 ...

  3. WEB前后端分离开发中的验证与安全问题

    登录验证以及安全问题:  1.请求接口全部用post方式,在后端判断请求方式是否为post 2.登录密码等敏感信息要加密后传输,如用RSA(支付宝里可下载公私钥生成工具),客户端公钥加密,传到服务器后 ...

  4. 前后端分离,如何使用Ucloud当作静态资源服务器

    以下以上传图片到ucloud 题记:当app或者前端在执行上传图片到ucloud服务器的时候,需要先来java服务器端接口做一次鉴权,获得许可,然后就可以上传图片到uclould了. 1.首先要在po ...

  5. php 跨域 验证_php 前后端分离开发进行跨域请求时ajax发送验证参数token的header头解决方法...

    php前后端分离开发中要实现前后端参数信息交互,必须解决token标识验证问题. 步骤如下: 1.前端ajax发送请求时,要设置一个自定义header头.代码如下: $.ajax({ url:&quo ...

  6. SpringBoot + Vue前后端分离开发:全局异常处理及统一结果封装

    SpringBoot + Vue前后端分离开发:全局异常处理及统一结果封装 文章目录 SpringBoot + Vue前后端分离开发:全局异常处理及统一结果封装 前后端分离开发中的异常处理 统一结果封 ...

  7. springboot flask php,使用Vue,Spring Boot,Flask,Django 完成Vue前后端分离开发(二)

    使用Vue完成前后端分离开发(二) Bravery never goes out of fashion. 勇敢永远不过时. 前面简单说了一下 Vue 项目的搭建和项目的大致页面,这里讲一下 Djang ...

  8. 利用Nginx轻松实现Ajax的跨域请求(前后端分离开发调试必备神技)

    利用Nginx轻松实现浏览器中Ajax的跨域请求(前后端分离开发调试必备神技) 前言 为什么会出现跨域? 造成跨域问题的原因是因为浏览器受到同源策略的限制,也就是说js只能访问和操作自己域下的资源,不 ...

  9. 前后端分离开发模式下后端质量的保证 —— 单元测试

    概述 在今天, 前后端分离已经是首选的一个开发模式.这对于后端团队来说其实是一个好消息,减轻任务并且更专注.在测试方面,就更加依赖于单元测试对于API以及后端业务逻辑的较验.当然单元测试并非在前后端分 ...

最新文章

  1. 开源实时日志分析ELK
  2. .net托管环境下struct实例字段的内存布局(Layout)和大小(Size)
  3. 线性筛素数(欧拉筛)
  4. linux进去网卡,Linux上使用socket进行网卡抓包
  5. Navicat导入TXT到数据库
  6. Python+Opencv实现无参数、全自动的Canny算法
  7. 26 SD配置-主数据-信用管理-指定信用控制区域及信用部分
  8. SpringCloud项目总结
  9. mysql两表查询单个_对两个表进行单个MySQL选择查询是可能的吗?
  10. 电子商务新模式--4B
  11. Python unittest基本框架组成(1)
  12. 矩阵拼接_numpy 矩阵拼接
  13. 计算机毕业设计之java+ssm的图书管理系统的设计与实现论文
  14. matlab矩阵转置函数
  15. 1、Linux软件源配置操作
  16. 常用心理学实验刺激呈现软件介绍
  17. Flutter集成与打包iOS应用
  18. BZOJ_4199_[Noi2015]品酒大会_后缀自动机
  19. linux的OOM killer
  20. 计算机桌面变蓝屏,电脑进入桌面蓝屏解决方法

热门文章

  1. 你需要明白的SQL SERVER书签查找(Bookmark Lookup)
  2. 浅谈面试中常考的两种经典布局——圣杯与双飞翼 1
  3. input 文本框和 img 验证码对齐问题
  4. 擷取 GridView 資料列的欄位值集合
  5. MyBatis使用,MyBatis单独使用笔记
  6. ASP.NET CORE的Code Fist后Models更改了怎么办?
  7. OSX/Linux 配置SSH免密登录并配置(Alias)别名登录
  8. 微软重写 Windows 10 激活规则
  9. 上海淘财经网要道歉客户的信
  10. css3 页面翻转效果.