1.2.5 • Published 4 years ago
express-mock-proxy v1.2.5
express-mock-proxy
利用express、mockjs和express-http-proxy开发的接口mock服务端,几行代码就可以搭建起一个接口mock服务,有如下特点:
- 通过js文件来配置接口mock数据,包括url、method、延时、http响应状态、响应内容都可以配置
- 内部集成mockjs,可以方便的生成模拟数据
- 复杂的业务逻辑可以通过返回函数,编码实现
- 在开发时,可能只有部分接口需要mock,其他请求都正常访问后端服务器,可以在启动mock服务时, 指定一个后端的接口地址,所有未mock的接口请求,都会被转发到后端服务器
使用前最好先熟悉mockjs相关的使用。
快速开始
启动
新建server.js。
// server.js
const mockProxy = require('express-mock-proxy');
const Mock = require('mockjs');
const app = mockProxy(3001, null, 'http://api.test.com', Mock);
运行该代码,将在3001端口启动mock服务,并将所有请求转发到http://api.test.com
node server.js
添加一个mock接口
新建routes
目录,我们将所有的mock数据都放在该目录下,在routes
目录下新建books.js
// routes/books.js
const books = [
{
url: '/api/v1/books',
disabled: false,
method: 'get',
delay: 20,
status: 200,
data: {
name: '@ctitle',
author: '@ctitle',
'pageNum|100-1000': 0,
'wordNum|10000-100000': 0,
publishAt: '@data',
},
},
];
module.exports = books;
然后在server.js
中添加routes
目录,系统会自动扫描routes下(包括子目录)的所有js文件,
将符合格式的js文件中的mock数据加载到express路由中。
指定扫描目录:
const path = require('path');
const dir = path.join(__dirname, 'routes');
const app = mockProxy(3001, dir, 'http://api.test.com', Mock);
启动服务后,访问http://localhost:3001/api/v1/books
就可以看到mock数据了。
接口文件定义
接口文件返回规则数组:
const sample = [
{rule1 },
{rule2 },
{rule3 },
];
module.exports = sample;
规则字段定义:
- url,接口url地址,必填
- disabled,是否禁用,默认为false
- method,http方法,默认为get
- delay,模拟响应延时,默认为300ms
- status,响应http状态码,默认为200
- data,响应数据,可以是对象(mockjs)或函数
data函数
如果需要mock的内容过于复杂,或者与请求中的参数相关,可以通过定义函数来实现。
下面我们定义添加
const books = [
{
url: '/api/v1/books',
method: 'post',
status: 200,
data: function ({req, res, Mock, Random}) {
// 从express的req中获取请求参数
const { page } = req.query || {};
// 返回{status, delay, content}
return {
status: 400,
delay: 1500,
content: {
code: 99,
message: '@title',
},
};
},
},
];
module.exports = books;
data函数的3个参数分别是:
- req,express的req对象
- Mock,mockjs对象
- Random,Mock.Random
上面的例子中的,除了响应内容content
外,我们重新设置了接口的status
和delay
参数,
data函数返回的参数会覆盖掉原有的设置。
自定义mockjs占位符
在启动服务之前,可以先设置自定义的占位符,然后就可以在接口文件中使用了。
const Mock = require('mockjs');
const Random = Mock.Random;
Random.extend({
myname: function () {
return Random.pick(["jim", "tom"]);
}
});
const app = mockProxy(3001, 'routes', 'http://api.test.com', Mock);