Authored by 毕凯

完善 API 调用

... ... @@ -3,30 +3,53 @@
* @author: xuqi<qi.xu@yoho.cn>
* @date: 2016/3/28
*/
'use strict';
var rp = require('request-promise');
var errUtil = require('../util/error');
var sign = require('./sign');
const API_URL = 'http://testapi.yoho.cn:28078';
var API_CONFIG = {
API_URL: 'http://testapi.yoho.cn:28078',
SERVICE_URL: 'http://testservice.yoho.cn:28077'
};
// 最好有后端提供的各接口对应什么服务器说明,接口文档
// 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';
if (process.env.NODE_ENV === 'production') {
// 正式环境接口地址
API_CONFIG = {
API_URL: 'http://apih5.yoho.cn/',
SERVICE_URL: 'http://serviceh5.yoho.cn/'
};
}
class API {
constructor() {
// var api = new API(); 默认调用新版接口
// var api = new API('SERVICE_URL'); 服务调用方法
constructor(type) {
this.type = type || 'API_URL';
this.headers = {
'User-Agent': 'YOHO WEB NODE' // TODO: 请求的服务端是否有要求格式,是否添加
'User-Agent': 'YOHO WEB NODE'
};
this.timeout = 5000;
this.server = API_CONFIG[type];
this.data = {};
// TODO: 后端接口是否需求签名校验未知,如果需要需要添加
if (this.type === 'API_URL') {
this.data.v = 7;
}
}
get(url, data) {
data = Object.assign(this.data, data);
if (this.type === 'API_URL') {
data = sign.apiSign(data);
}
return rp({
url: `${API_URL}${url}`,
url: `${this.server}${url}`,
headers: this.headers,
timeout: this.timeout,
qs: data
... ... @@ -41,8 +64,14 @@ class API {
var rps = [];
for (let el of urls.values()) {
el.data = Object.assign(this.data, el.data);
if (this.type === 'API_URL') {
el.data = sign.apiSign(el.data);
}
rps.push(rp({
url: `${API_URL}${el.url}`,
url: `${this.server}${el.url}`,
headers: this.headers,
timeout: this.timeout,
qs: el.data
... ... @@ -55,12 +84,18 @@ class API {
}
post(url, data) {
data = Object.assign(this.data, data);
if (this.type === 'API_URL') {
data = sign.apiSign(data);
}
return rp({
url: `${API_URL}${url}`,
url: `${this.server}${url}`,
method: 'post',
headers: this.headers,
timeout: this.timeout,
form: data // TODO: post 请求格式不知后端要求 json 还是 form 提交,需要后续完善
form: data
}).catch(errUtil.apiError);
}
}
... ...
// API签名校验函数,调用后端接口的时候有私钥校验
exports.apiSign = (data) => {
return data; // 算法参照PHP
};
... ...
... ... @@ -4,14 +4,17 @@
* @date: 2016/3/29
*/
var API = require('../../library/api');
var api = new API();
var api = new API('SERVICE_URL');
module.exports = (data) => {
// 接受控制器传来的参数,并进行校验处理, 等后续操作
// 处理完成后,发给后端
data = Object.assign({}, data);
data = Object.assign({}, {
author_id: 380463,
client_type: 'h5'
});
// 所有数据返回一个 Promise,方便 Promise.all 调用
return api.get('/wx', data);
return api.get('/guang/service/*/author/getAuthor', data);
};
... ...
... ... @@ -13,7 +13,7 @@ var wxLottery = require(`${routes}/wx-lottery/index`);
var starClassroom = require(`${routes}/star-classroom`);
app.get('/', index.index); // 主页
app.get('/wxLottery', wxLottery.index); // 微信抽奖活动
app.get('/wx/lottery', wxLottery.index); // 微信抽奖活动
app.get('/star/classroom', starClassroom.index); // 星潮教室主页
app.get('/star/classroom/check-in', starClassroom.checkIn); // 星潮教室签到
... ...
... ... @@ -4,25 +4,26 @@
* @date: 2016/3/29
*/
// var lotteryModel = require('../../models/wxLottery/index');
// var errUtil = require('../../util/error');
var lotteryModel = require('../../models/wx-lottery/index');
var errUtil = require('../../util/error');
exports.index = (req, res) => {
// 传入参数给lotteryModel发送到后端,获取返回的数据
// lotteryModel({test: 1}).then((data) => {
lotteryModel({test: 1}).then((data) => {
// // 接收接口返回到的数据,处理后,渲染页面或者返回 JSON
// res.send(data);
// 接收接口返回到的数据,处理后,渲染页面或者返回 JSON
res.send(data);
// }).catch((err) => {
// errUtil.webError(err, res); // 抓取 Promise 链的错误
// });
res.render('wx-lottery/index', {
title: '微信抽奖',
module: 'wxLottery',
version: '0.0.1'
// wxLottery: data
}).catch((err) => {
errUtil.webError(err, res); // 抓取 Promise 链的错误
});
// res.render('wx-lottery/index', {
// title: '微信抽奖',
// module: 'wxLottery',
// version: '0.0.1'
//
// // wxLottery: data
// });
};
... ...