api.js 1.83 KB
/**
 * 接口公共访问方法
 * @author: xuqi<qi.xu@yoho.cn>
 * @date: 2016/3/28
 */
var rp = require('request-promise');
var errUtil = require('../util/error');

const API_URL = 'http://testapi.yoho.cn:28078';

// 最好有后端提供的各接口对应什么服务器说明,接口文档
// const DEV_API_URL = 'http://devapi.yoho.cn:58078';
// const SERVICE_URL = 'http://testservice.yoho.cn:28077';
// const YOHOBUY_URL = 'http://www.yohobuy.com';
// const API_OLD = 'http://test2.open.yohobuy.com';

class API {
    constructor() {
        this.headers = {
            'User-Agent': 'YOHO WEB NODE' // TODO: 请求的服务端是否有要求格式,是否添加
        };
        this.timeout = 5000;

        // TODO: 后端接口是否需求签名校验未知,如果需要需要添加
    }

    get(url, data) {
        return rp({
            url: `${API_URL}${url}`,
            headers: this.headers,
            timeout: this.timeout,
            qs: data
        }).catch(errUtil.apiError);
    }

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

        for (let el of urls.values()) {
            rps.push(rp({
                url: `${API_URL}${el.url}`,
                headers: this.headers,
                timeout: this.timeout,
                qs: el.data
            }));
        }

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

    post(url, data) {
        return rp({
            url: `${API_URL}${url}`,
            method: 'post',
            headers: this.headers,
            timeout: this.timeout,
            form: data // TODO: post 请求格式不知后端要求 json 还是 form 提交,需要后续完善
        }).catch(errUtil.apiError);
    }
}

module.exports = API;