Repository navigation
Expand file tree
/
Copy pathindex.js
More file actions
116 lines (105 loc) · 2.91 KB
/
Copy pathindex.js
File metadata and controls
116 lines (105 loc) · 2.91 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
var bodyParser = require('body-parser');
var logger = require('./lib/logger');
var path = require('path');
var mockup = {
options: {
// 模拟数据根目录
root: path.resolve(__dirname, 'mockup'),
// 需要拦截的请求规则,如: ['/api/*', '/v2/*']
prefix: []
}
};
mockup.load = function (request, type) {
var requestPath = request.path;
var pathSegments = requestPath.split(/\//);
var notEmptySegments = [];
pathSegments.forEach(function (item) {
item && notEmptySegments.push(item);
});
if (notEmptySegments.length > 0) {
var filePath = notEmptySegments.join('/');
try {
var mockModuleName = path.resolve(mockup.options.root, filePath);
logger.info('[FILE]', 'Try Load', mockModuleName);
// 每次都重新获取
delete require.cache[require.resolve(mockModuleName)];
return require(mockModuleName);
}
catch (e) {
logger.error('[ERROR]', request.path, e.toString());
return null;
}
}
else {
return null;
}
};
mockup.setup = function(options) {
for (var key in options) {
if (options.hasOwnProperty(key)) {
mockup.options[key] = options[key];
}
}
return function (app) {
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: true}));
for (var i = 0; i < mockup.options.prefix.length; i++) {
var prefix = mockup.options.prefix[i];
app.all(prefix, function (req, res) {
var reqHandler = mockup.load(req);
if (!reqHandler) {
res.status(404).end("404");
return;
}
logger.ok('[OK]', 'Mock Request', req.path);
res.json(reqHandler.response(req.path, req.method === 'GET' ? req.query : req.body));
});
}
};
};
/**
* 返回普通成功mockup请求
*
* @param {Object} result 返回的结果数据
*/
mockup.ok = function (result) {
return {
code: 0,
data: result || {}
};
};
/**
* 返回列表类型成功mockup请求
*
* @param {Object} result 返回的结果数据
* @param {Object} page 返回分页数据的元数据
*/
mockup.list = function (result, page) {
page = page || {};
var response = {
code: 0,
data: {
page: {
total: page.total || 100,
number: page.number || 1,
size: page.size || 15,
orderBy: page.orderBy || 'id',
order: page.order || 'desc',
},
list: result || []
}
};
return response;
};
/**
* 返回普通失败mockup请求
*
* @param {Object} msg 失败信息
*/
mockup.fail = function (code, msg) {
return {
code: code || 1,
message: msg
};
};
module.exports = mockup;