api.js 1.79 KB
/**
 * 接口公共方法
 * @author: xuqi<qi.xu@yoho.cn>
 * @date: 2016/4/25
 */

'use strict';

const rp = require('request-promise');
const _ = require('lodash');
const log = require('./logger');
const api = require('../config/common').domains.api;
const Timer = require('./timer');


let ApiUrl;

class API {

    constructor(url) {
        ApiUrl = url || api;
    }

    /**
     * get
     * @param url String
     * @param data Obejct
     */
    get(url, data) {

        let options = {
            url: `${ApiUrl}${url}`,
            qs: data
        };

        let timer = new Timer();
        timer.put('getApi');// 统计时间开始

        let ret = rp(options);

        ret.then((body)=>{
            let duration = timer.put('getApi');// 接口返回
            log.info('API GET: %s, parms: %j , durationMs: %d ms , body: %s', options.url, options.qs, duration, body);
        }).catch((error)=>{
            let duration = timer.put('getApi');// 接口返回
            log.error('API GET: %s, parms: %j , durationMs: %d ms error: %s , statusCode: %d', options.url, options.qs, duration, error.message, error.statusCode);
        });

        return ret;
    }

    /**
     * multi get
     * @params: urls => Array[Object[url[string], data[object]]]
     */
    multiGet(urls) {
        var rps = [];

        _.forEach(urls, function(el) {
            rps.push(rp({
                url: `${ApiUrl}${el.url}`,
                qs: el.data
            }));
        });

        return Promise.all(rps).then((d) => {
            return d;
        });
    }

    /**
     * post
     * @param url String
     * @param data Obejct
     */
    post(url, data) {
        return rp({
            url: `${ApiUrl}${url}`,
            method: 'post',
            form: data
        });
    }
}

module.exports = API;