UNPKG

egg-input-regex-filter

Version:

filter data which from user side use regex, and returns a result data whose format is declared by coder.

97 lines (91 loc) 3.54 kB
class Filter { /** * 过滤操作,返回对象 包括过滤后的数据对象 及检测结果 * 返回(return ): * { * data: {filter之后的dataObj }, * err: {}/{key:[{...}, ...] } //空对象 或key值关联的对象数组 的对象 * } * * 示例(sample ): * var obj = {name: 'dzhukf', age: 20 }, * filter = { * name: [ * {re: /{5,}/, errCode: -1, errMsg: '长度至少为5位'}, * {re: /^z/, errCode: -2, errMsg: '必须以z开头'}, * ] * } * * 运行(and run ): Filter.doFilter(obj, filter, false ) * * 结果(sample return ) : * { * data: {name: null, age: 20 }, * err: { * name: [{errCode: -2, errMsg: '必须以z开头' }, ... maybe more ], * ...maybe more * } * } * * Filter::doFilter(obj, filter ) * * @param dataObj: {key: val , key: val ... } * @param regexObj: {key: [{re: /xx/ , errCode: 21, errMsg: 'xxx'}, ... ], ... } * @param quickRtn: true/false * @param rtnFn: 用户自定义 错误返回数据格式 */ static doFilter(dataObj, regexObj, quickRtn = true, rtnFn = null ) { //dataObj = JSON.stringify(dataObj ) //dataObj = eval("(" + dataObj + ")" ) if(!dataObj ) return {data: {}, err: [] } //传入对象为空 if(!regexObj ) return {data: dataObj, err: [] } //过滤器为空 var rtnData = {retData: {}, err: {}}, failedMatch = [] // 参数值 不匹配正则 for(var i in regexObj ) { if(regexObj[i].length == 0 ) continue if(dataObj[i] == undefined ) dataObj[i] = '' regexObj[i].forEach(function(val ){ if(!dataObj[i].toString().match(val.re) ) { if(rtnData.err[i] == undefined ) rtnData.err[i] = [] rtnData.err[i].push({errCode: val.errCode, errMsg: val.errMsg } ) if(failedMatch[i] == undefined ) failedMatch.push(i ) } }) if(quickRtn && rtnData.err[i] != undefined && rtnData.err[i].length > 0 ) break } failedMatch.forEach(function(item ) { dataObj[item] = null }) rtnData.retData = dataObj return rtnFn ? rtnFn(dataObj, rtnData.err ) : rtnData } /*** * 标准JSON返回输出 (a startand json return format ) * * @param code : a return code of business logic * @param data : return data * @param errMsg : an error message * @param okCode : if code is eq this code , errMsg will not be seted . */ static jsonRtn(code, data = {}, errMsg = '', okCode = 0 ) { var rtnData = { code: code, data: data } if(code != okCode ) rtnData.data.errMsg = errMsg return JSON.stringify(rtnData ) } /** * return a json to client for input-filter * 将接收到的用户错误提交 转成浏览器返回的数据形式 * @param errMsgObj * @returns {*} */ static errToRtn(errMsgObj ) { var errRtn = {}, rtnDt for(var i in errMsgObj ) { errRtn = errMsgObj[i][0]; break } (rtnDt = {}) && (rtnDt.data = {} ) && ({errCode: rtnDt.code, errMsg: rtnDt.data.errMsg } = errRtn ) return rtnDt } } module.exports = Filter