UNPKG

rapnc

Version:

Node client for RAP 1.0

170 lines (163 loc) 4.34 kB
var dao = require('../dao'); var helper = require('../helpers'); var isArray = helper.types.isArray; var isObject = helper.types.isObject; var detect = helper.types.detect; /* data : { a: 1, b: 2 } params: [ { identifier: 'a', data_type: 'number', remark: '' }, { identifier: 'b', data_type: 'number', remark: '' } ] */ function checkDataByParams(data, params) { var id, dataType, realType, param, i, l; for(i = 0, l = params.length; i < l; i++) { param = params[i]; id = param.identifier; dataType = param.data_type; var mockId = null; if (id.indexOf('|') != -1) { mockId = id.split('|')[0]; } if (mockId) { if (!(mockId in data)) { return 'missing property: ' + mockId ; } } else if (!(id in data)) { return 'missing property: ' + id; } realType = detect(data[id]); if (dataType.indexOf('array') == -1) { if (realType != dataType) { return 'data type of [' + id + '] error: expected: ' + dataType + ', actural: ' + realType; } } else { if (realType != 'array') { return 'data type of [' + id + '] error: expected: ' + dataType + ', actural: ' + realType; } //checkDataByParams(data[id], param) } if (dataType == 'object') { var msg = checkDataByParams(data[id], param.params); if (msg) { return msg; } } if (dataType.indexOf('array') != -1) { var arrayType = /array<(\w+)>/.exec(dataType)[1]; if (arrayType == 'object') { for(var j = 0; j < data[id].length; j++) { var msg = checkDataByParams(data[id][j], param.params) if (msg) { return msg; } } } else { for(var j = 0; j < data[id].length; j++) { var detected = detect(data[id][j]); if (detected != arrayType) { return 'array<' + arrayType + '> [' + id + '] contains ' + detected; } } } } } } // msg = checkDataByParams({ // a: [1, 2, 3], // b: 2, // c: [{ // d: 1, // e: 1 // }, // { // d: 1, // e: 1 // }], // f: { // g: 1, // h: 1 // } // }, [ // { // identifier: 'a', // data_type: 'array<boolean>', // remark: '' // }, // { // identifier: 'c', // data_type: 'array<object>', // remark: '', // params: [ // { // identifier: 'd', // data_type: 'number', // remark: '' // }, // { // identifier: 'e', // data_type: 'number', // remark: '' // } // ] // }, // { // identifier: 'b', // data_type: 'number', // remark: '' // }, // { // identifier: 'f', // data_type: 'object', // remark: '', // params: [ // { // identifier: 'g', // data_type: 'number', // remark: '' // }, // { // identifier: 'h', // data_type: 'number', // remark: '' // } // ] // } // ]) // console.log(msg); function doCheck(pid, url, pathname, params, response, callback) { // 找到Action // 转换成object模式 // 匹配两者 dao.getActionJson(pid, url, pathname, function(err, data) { if (err) { callback(-1, err); return; } data = data[0]; var params = data.responseParams; if (!params) { callback(-1, 'no response defined'); return; } var result = checkDataByParams(response, params); if (result) { callback(500, result); } else { callback(200); } }) } exports.doCheck = doCheck;