ys-helper v1.0.5
此插件包更名为ys-helper,具备的功能如下
- 接口助手
- 支持数据格式统一
- 支持中间件
- 异常助手
#调用方式
var ysHelper = require('ys-helper'),
api1 = ysHelper.apiInit('v1'),
api2 = ysHelper.apiInit('v2'),
api3 = ysHelper.apiInit('v3'),
api4 = ysHelper.apiInit('v4'),
errors = ysHelper.errors;
ap1.post({
action: '....',
param1: '....',
param2: '....',
}).then(function(data){
console.log(data)
}).catch(errors.ApiError, function(err){
//可以通过异常类型处理错误
console.log(err);
}).catch(function(err){
console.log(err);
});
#中间件定义
var Promise = require('bluebird');
var TestMiddleWare = (function() {
function TestMiddleWare() {}
//定义接口在请求开始前的处理
TestMiddleWare.prototype.start = function(request) {
console.log('request start');
console.log(request.params);
return Promise.resolve();
};
//定义接口在数据已处理完成准备请求前的处理
TestMiddleWare.prototype.afterMakeRequest = function(request) {
console.log(request.params);
return Promise.resolve();
};
//定义接口请求结束后的处理
TestMiddleWare.prototype.end = function(request) {
console.log('request end');
return Promise.resolve();
};
//定义接口请求异常时的处理
TestMiddleWare.prototype.error = function(request, err) {
console.log('request error', err);
return Promise.resolve();
};
return TestMiddleWare;
})();
#中间件使用
var middlewares = [
[TestMiddleWare]
]
var api = ysHelper.apiInit(version, middlewares);
#为何需要异常助手 1. 分流错误处理,每个控制器的编写再也不需要去考虑我这个异常该怎么处理,那个错误该怎么返回 2. 保持promise格式的优雅,有异常有错误都是直接到catch中,只要一路写then即可
#异常助手说明
- errors.HttpError -- 接口http访问异常
- message -- 错误信息
- version -- api版本
- action -- 接口名称
- errors.ApiError -- 接口信息异常
- message -- 错误信息
- version -- api版本
- action -- 接口名称
errors.TipsError -- 告知程序此异常可通知于用户
- message -- 错误信息
#异常助手使用栗子
###后端代码
app.post('/getData', function(req, res, next){
api.post({
action: 'xxxxx',
params: 'xxxxx'
}).then(function(data){
if(!data.status){
return Promise.reject(new errors.TipsError(data.msg));
}
return api.post({
action: 'xxxxx',
params: 'xxxxx'
});
}).then(function(data){
res.json({status: true, data: data});
}).catch(next);
});
app.use(function(err, req, res, next){
if(err instanceof errors.TipsError){
res.json({status: false, errors: 1, tips: err.message});
}else if(err instanceof otherError){
res.json({status: false, errors: 2})
}else{
res.status(500).render('error');
}
});
###前端全局代码
$(document).ajaxError(function(){
alert('系统繁忙,请稍后重试');
}).ajaxSuccess(function(event, xhr){
var data = JSON.parse(xhr.responseText);
if(!data.status){
switch(data.errors){
case 1:
alert(data.tips);
break;
case 2:
alert(....);
break;
default:
....
}
}
});
###前端页面代码
$.post('/getData', {param: 'xxxx'}, function(data){
if(!data.status) return; //此处直接return,交由全局处理自动处理
//此处处理正常逻辑,开发人员对于异常/错误提示的处理可以集中在全局,从此精力可完全集中于正常的逻辑处理
}, 'json');
#接口开发说明 接口最基础的类是api/Tools.coffee,下一层是api/httpHelper.https.coffee,最终api接口继承httpHelper的Request类
Tools.coffee是用来集中api接口处理数据时所需的各种方法
httpHelper.coffee是用来程序最终访问http接口的处理,其中make_request是在请求前处理要发送的数据信息,dispose_data用来处理请求后最终返回的数据格式
每个api版本继承了Request后,通过重写make_request和dispose_data来处理不同版本间的差异
接口约定的返回格式统一为
{
status: 'bool',
raw: '接口返回的原始数据',
data: '开发者可以直接拿来处理的数据',
msg: 'status为false的信息'
}
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago