该koa中间件是通过拦截http请求来模拟接口数据
通用使用
const Koa = require('koa');
const mock = require('koa-mock-md');
const app = new Koa();
// 引入mock中间件
app.use(mock({
mock: true, // 是否开启mock
route: '/api', // 匹配路由, 可以是正则表达是,函数,和字符串
root: './mock', // 本地存放mock js目录
bodyString: true // 返回的数据格式是否是字符串
}));
app.listen(3000);
示例
- 假设请求接口路由为/api/user/getUserInfo
- 本地配置模拟文件yourproject/mock/api/user/getUserInfo.js,可以针对不同的接口要求定制返回数据:
- 正常返回数据
console.log(ctx.query);
next(null, {
code: 1,
data: {
id: 1,
username: 'showjoy',
age: 28,
sex: male
},
message: 'success'
})
- 错误
let err = new Error('nono');
err.statusCode = 300; // 不设置,默认是500
next(err);
- 定制返回头
ctx.set('Set-Cookie', ['a=3']);
// or
ctx.cookies.set('name', 'showjoy');
next(null, {
code: 2,
data: 'b',
message: 'a'
});
Bucky使用
安装
npm i @lianjia/koa-mock-md
在server/src/services目录创建mock.js
import mock from '@lianjia/koa-mock-md';
import path from 'path';
export default () => mock({
// 需要mock的环境 development
mock: ['development'].includes(process.env.NODE_ENV),
// 这里可以根据路径自定义返回需要mock的路径
// 可以按目录来分模块mock,也可单独,全局匹配
route: p => /^\/api/.test(p),
// mock文件路径
root: path.join(__dirname, '../../../mock'),
});
mock接口文件
比如client端定义的接口:
/**
* 基础配置
*/
@GET('v1/config/base')
fetchConfigMap() {
}
那么在mock文件夹中创建一个v1/config/base.js即可,具体使用可以看上面的‘示例’