Interfacer.js 1.85 KB
var util = require('util');
var Emitter=require('events');
var Request = require('request');
var async=require('async');
/*接口*/


var Interfacer=function(config){
	this.config=config;
	this.apis={};
	Emitter.call(this);
};

util.inherits(Interfacer,Emitter);

Interfacer.prototype.register = function(mos) {
	var me=this,name=mos.namespace;
	for(var key in mos.apis){
		/*需要进行验证判断*/
		me.apis[name+"-"+key]=mos.apis[key];
	}
};
function __requestApi(config,apiOpt,req,callback){
	var data={};
	apiOpt.params.forEach(function(param){
		data[param.name]=req.param(param.name)||"1454";
	});
	var options={
		url:config.domain+apiOpt.url,
		method:apiOpt.method,
		//数据组装
		qs:apiOpt.method.toUpperCase()=="GET"?data:undefined,
		// form:apiOpt.method.toUpperCase()=="GET"?undefined:data//,
		body:apiOpt.method.toUpperCase()=="GET"?undefined:JSON.stringify(data),

		headers: apiOpt.headers||{
	       'Content-Type' : 'application/json'
	    }
	};
	Request(options,function(error, response, body){
		if(error){
			return callback(error,null); 
		}
		return callback(null,JSON.parse(body)); 
	});
}
/*
* {mos} 接口key 数组 比如[key1,key2] 后面可能要兼容字符串 比如 传key1
*/
Interfacer.prototype.require=function(mos,req,res,cb){
	var me=this,funcs=[],names=[];

	mos.forEach(function(name){

		if(me.apis.hasOwnProperty(name)){
			names.push(name);
			if(me.config.mock){
				funcs.push(me.apis[name].output);
			}else{
				funcs.push(function(callback){
					__requestApi(me.config,me.apis[name],req,callback);
				});
			}
		}
	});

	if(funcs.length!=mos.length){
		return {err:"某个key 可能不存在!"};
	}
	if(me.config.mock){
		console.log(funcs);
		cb(null,funcs,names);
		return;
	}
	async.parallel(funcs, function(err, results){
		if(err){
			return cb(err,null,names);
		}
		cb(null,results,names);
	});
};


module.exports= Interfacer;