node中【request+validation】结合封装

来源:互联网 发布:java 乐观锁 例子 编辑:程序博客网 时间:2024/05/17 08:32

封装模块

var config = require( '../config' );var request = require( 'request' );exports.http = function( url, type, data, req, reqRule, headers, callback ){var rsMsg = {'code' : -100,'msg' : 'error','message' : '','reason' : '失败','data' : []};try{rsMsg = this.checkReqRuld( req, reqRule );if( rsMsg.code != 0 ){return res.json( rsMsg );}if( url == '' || url == undefined ){callback( rsMsg );}data.rS    = config.rS;data.token = data.accessToken = data.token || req.session.token || '';if(typeof req.session.scsInfor !== 'undefined'){data.loginUid  = req.session.loginUid;data.adUid     = req.session.adUid;data.agUid     = req.session.agUid;}var options = {headers : headers,url : config.server_base + url,form : data};console.log( '请求参数:', options );if( type == undefined || type == '' || type.toLowerCase() == 'get' ){delete options.form;options.qs = data;request.get( options, function( error, response, body ){//console.log(response);if( response.statusCode == 200 ){rsMsg = JSON.parse( body );}callback( rsMsg );console.log(rsMsg);} );}else if( type.toLowerCase() == 'post' ){request.post( options, function( error, response, body ){//console.log(response);if( response.statusCode == 200 ){rsMsg = JSON.parse( body );}callback( rsMsg);console.log(rsMsg);} );}else if( type.toLowerCase() == 'put' ){request.put( options, function( error, response, body ){if( response.statusCode == 200 ){rsMsg = JSON.parse( body );}callback( rsMsg );console.log(rsMsg);} );}else if( type.toLowerCase() == 'delete' ){request.delete( options, function( error, response, body ){if( response.statusCode == 200 ){rsMsg = JSON.parse( body );}callback( rsMsg );} );}else{request.get( options, function( error, response, body ){if( response.statusCode == 200 ){rsMsg = JSON.parse( body );}callback( rsMsg );} );}}catch( e ){rsMsg.message = e.message || e.stack || '未知错误';return callback( rsMsg );}}/* * node端验证规则 */exports.checkReqRuld = function( req, reqRule ){var rsMsg = {'code' : 0,'msg' : 'ok','message' : '成功','childMessages' : [],'data' : []};if( reqRule != undefined && reqRule.length > 0 ){var i = 0, j = 0, filed = null, rule = null, option = null;for( i in reqRule ){filed = reqRule[ i ].field;rule = reqRule[ i ].rule;if( reqRule[ i ].option != undefined ){option = reqRule[ i ].option;}for( j in rule ){switch( j ){case 'notEmpty':req.assert( filed, rule[ j ] ).notEmpty();break;case 'isInt':req.assert( filed, rule[ j ] ).isInt( option );break;case 'is_date':req.assert( filed, rule[ j ] ).isDate();break;case 'isIn':req.assert( filed, rule[ j ] ).isIn( option );break;case 'isFloat':req.assert( filed, rule[ j ] ).isFloat( option );break;case 'isJSON':req.assert( filed, rule[ j ] ).isJSON();break;}}}var errors = req.validationErrors();if( errors && errors.length > 0 ){rsMsg.code = -100;rsMsg.msg = 'error';rsMsg.message = '失败';for( var i = 0; i < errors.length; i++ ){rsMsg.childMessages.push( errors[ i ].msg );break;}}}return rsMsg;}

调用dome

//添加商圈APIexports.addApi = function(req, res, next){try{var data     = {}, rule = [];data.lbs     = req.body.lbs || ''; //商圈信息data.comcId  = req.body.comcId || 0; //一级分类data.comScId = req.body.comScId || 0; //二级分类rule.push({'field' : 'lbs','rule'  : {'notEmpty' : '商圈信息不能为空','isJSON'   : '商圈信息不是一个合法的JSON'}}, {'field' : 'comcId','rule'  : {'notEmpty' : '一级分类不能为空','isInt'    : '一级分类Id必须为整数'}}, {'field' : 'comScId','rule'  : {'notEmpty' : '二级分类不能为空','isInt'    : '一级分类Id必须为整数'}});access.http('/AdDirect/AddCommonLbs', 'post', data, req, rule, '', function(result){return res.json(result)})}catch(err){console.log(err)}}