h-mock-middleware
v0.6.1
Published
mock-middleware
Downloads
11
Readme
h-mock-middleware - mock中间件
注意事项
此中间件支持 Express app.use(req,res,next) 和 koa app.use(ctx,next) 的调用,但 mockSettings.js 中,仅支持类 Express 的 (req,res,next) 形式的中间件 handle 。
使用方法
配置文件
配置文件mockSettings.js
支持修改立即生效。支持js函数执行。
// mockSettings.js
mockSettings = {
"delay": 0, // 全局延时
"timeout": 10000, // 请求超时设置
"temDir": "tem", // 自动记录requestRemote的结果目录
"dist_dir": {
"js": "dist-prod/js"
},
"mockList": [{
// 'reg': '/api/controller/action', // 匹配的正则表达式
// 'handle': ajaxSync('./path/to/mockdata.json') // 发送对应json文件
// }, {
'reg': '/api',
'handle': requestRemote('http://a.b.c') // 代理到对应的远端
// }, {
// 'reg': '/api',
// 'handle': requestRemote('https://publish.online.url/')
// }, {
// 'reg': '/data/',
// 'handle': ajaxDirSync({dirBasePath: './data/', pathPrefix: '/data/'}) // 返回文件,将url的前缀用pathPrefix替换,并返回相对于dirBasePath地址的文件。
}, {
'reg': '^/dist/',
'handle': routerReplace('^/dist/', '/') // 替换router url的指定正则表达式部分为指定内容
}, {
'reg': '/data/',
'handle': ajaxDirSync() // 默认参数{dirBasePath: './',pathPrefix: '/'}
}]
}
Express 实例用法
以webpack开发服务为例, devServer.before 第一参数是 Express app 实例。
// webpack.config.js
var middewareFun = require('h-mock-middleware').middleware;
module.exports = {
//...
devServer: {
before: function(app, server) {
app.use(middewareFun());
}
}
};
在webpack
运行目录中放置配置文件mockSettings.js
(见上文)
gulp 工作流
在gulpfile.js
文件中:
// gulpfile.js
var middewareFun = require('h-mock-middleware').middleware;
gulp.task('serve', function() {
browserSync.init({
port: 3000,
server: {
baseDir: "./",
},
middleware: [middewareFun()],
});
}
与gulpfile.js
文件同级目录中放置配置文件mockSettings.js
(见上文)
其他事项
为了使配置文件mockSettings.js
可以使用js注释语法,代码中使用了eval
,请在使用本包的时候,注意mockSettings.js
需是可信的。
修改配置文件,不必重启进程,在下一次请求就会生效。
未配置temDir
时,请求远端数据不会自动记录。
配置文件中可以使用js注释语法。
handle 函数抛出异常,会返回500状态码和异常信息。
handle 不调用next就会由当前handle处理;调用next会继续检查下一个mockItem。
遍历mockList时,最后一个handle调用next会转移控制权到其他中间件。
在 koa use中, handle 调用 req.status 时,会设定 response.status,并且之后调用 req.end 时,不会被改成 200 。
在 koa use中, handle 调用 req.end 时,若未设定 status ,将自动默认设定 200 ,并且会结束本中间件(resolve())。
仓库地址
TODO
- English translation.
- 完善设置功能。
- 整理代码。