whistle.capimock
Version:
连接capi的whistle插件
82 lines (64 loc) • 1.8 kB
JavaScript
/* eslint-disable no-console */
var express = require('express');
var app = express();
var dataMgr = require('./data-mgr');
var util = require('./util');
app.use(function (req, res, next) {
req.on('error', util.noop);
res.on('error', util.noop);
next();
});
// v3通用响应函数
function sendResponse(res, code, data) {
var responseData = {
'code': code,
'data': {
'data': {
'Response': data
}
}
};
res.json(responseData);
}
app.use(function (req, res) {
var tableList = dataMgr.getList();
var allCheckLists = tableList.reduce((accumulator, current) => {
return accumulator.concat(current.checkList)
}, [])
var inputStr = req.url;
var start = inputStr.indexOf('cmd=') + 4;
var end = inputStr.indexOf('&', start);
var extractedContent = inputStr.substring(start, end);
const is = allCheckLists.includes('/' + extractedContent);
if (!is) {
req.passThrough();
return;
}
const foundObject = tableList.find(table => {
return table.list.some(item => item.key === '/' + extractedContent)
});
const filterList = foundObject.list.find(item => item.key === '/' + extractedContent);
function extractValues(obj) {
if (typeof obj !== 'object' || obj === null) {
return obj;
}
if (Array.isArray(obj)) {
return obj.map(item => extractValues(item));
}
const newObj = {};
for (const key in obj) {
if (obj.hasOwnProperty(key)) {
newObj[key] = extractValues(obj[key]);
}
}
if ('value' in newObj) {
return newObj.value;
}
return newObj;
}
const responseData = extractValues(filterList.properties)
sendResponse(res, 0, responseData);
});
module.exports = function startServer(server, options) {
server.on('request', app);
};