根据请求配置文件生成超轻量级 model,可以根据项目需求,基于 tiny-model 封装出model组件。
必须,默认为form,可选值为:form,json
必须,默认为json,配置响应数据的类型
可选,防 csrf/xsrf 的 token 配置。配置后,发送请求时会自动在cookie中获取对应的token,放到请求参数里。
当 xsrf 为 Function 时,需要返回的数据结构为:
{
//xsrf 的参数名
name: '_xsrf',
value: 'xxx'
}
可选,默认为flase,发送请求时是否显示遮罩
可选,遮罩的样式,仅当showMask为true时会生效
可选,发送请求时要disabled的dom对象
可选,disable 时要应用的样式名称,仅当 disableEl 有效时才会生效
必须,默认为true,发送请求时自动添加时间戳,防止缓存。
必须,请求的根路径,默认为空
必须,默认为 status.code,返回数据中状态码的key,如果没有状态码配置为null
必须,默认为 status.message,返回数据中状态信息的key,如果没有状态信息配置为null
成功的状态码,codeKey 不为 null 时的必须配置,默认值为:1。
可选,每次请求之前要执行的函数,回调的参数为 (resp, isSucc, config)
可选,每次请求完成后要执行的函数,回调的参数为 (resp, isSucc, config)
可选,每次请求报错后(非200的响应)要执行的函数,回调的参数为 (error, config)
可选,自定义请求头
可选,设置XHR 对象的属性,例如跨域请求时要求携带cookie的设置:
xhrFields: {
withCredentials: true
}
model 请求方法配置对象。上面的全局配置项都可以在 modelConfig 中配置,modelConfig 会覆盖全局配置项, 必选参数如下:
请求的url
请求的方法
//配置信息
modelConfig: {
test: {
url: '/test',
method: 'get'
}
}
//生成的 model 方法
model.test(data, successCb, errorCb) //callback style
model.test(data).done(successCb).fail(errorCb) //promise style
//successCb
//resp: 请求响应
//isSucc: 是否成功,根据 codeKey 和 successCode 的配置判断
//status: 状态信息,status.code 对应 codeKey 配置,status.msg 对应 msgKey 配置
successCb (resp, isSucc, status)
//errorCb
//error: error.status http 状态码,error.textStatus 状态信息(如:error, timeout ...)
errorCb (error)
var Model = require('tiny-model')
//Model 配置
var config = {
before: function(){
console.log('before')
},
complete: function(){
console.log('complete')
},
error: function(){
console.log('error')
},
/**
* 请求地址的根路径,baseUrl+daoConfig.url 为最终请求地址
* baseUrl 默认是空
*/
baseUrl: '/Api',
/**
* 发送的数据类型:json 或 form
* 如果是 json 那么发送的数据就是个json字符串,如果是form就是普通的form提交
* sendType 默认是 json
*/
sendType: 'form',
/**
* 响应数据类型,默认为 json
*/
dataType: 'json',
/**
* 防xsrf参数,默认为null
* 如果配置为_xsrf,那么携带的参数名为_xsrf, cookie 的名称也是 _xsrf
*/
xsrf: null,
/**
* 是否显示遮罩,默认为 false
*/
showMask: false,
/**
* showMask 为 true 时,遮罩div的样式
*/
maskClass: 'mask',
/**
* 发送请求时,要disable的dom,配置jquery选择器即可
*/
disableEl: null,
/**
* disableEl 不是 null 的时候,要给 disableEl 添加的样式
* 默认为 disabled
*/
disableClass: 'disabled',
/**
* 是否添加基于时间戳的防缓存token
* 默认是true
*/
hasToken: true,
/**
* 状态码字段名称
* 默认为 status.code
*/
codeKey: 'status.code',
/**
* 成功的状态码
* 默认是 1
*/
successCode: 1,
/**
* 状态信息字段名称
* 默认为 status.message
*/
msgKey: 'status.message',
/**
* 自定义 ajax 请求头
*/
xhrFields: null,
/**
* 具体的 model 配置对象,key 为 model 的方法名称,value 为 model 方法的具体配置
* dao 方法配置的必须字段:
* url: api 地址
* method http 请求的方法
* 重要提示:全局默认配置都会应用到 model 方法,如果全局配置不满足某个 model 方法的需求
* 可以在 model 方法的配置中重新配置,model 方法的配置优先级最高
*/
modelConfig: {
getDomain: {
url: '/Domain.List',
method: 'GET',
/**
* 在解析响应数据时,获取状态码的字段名称为 status
* 不会是全局默认的配置的 status.code,因为此 model 方法配置了 codeKey 为 status
*/
codeKey: 'status',
msgKey: 'string'
},
addDomain: {
url: '/Domain.Add',
method: 'POST',
hasToken: false
}
}
}
/**
* Model 初始化时会根据 modelConfig 对象生成 model 方法
* model 方法的方法名为 modelConfig 配置对象的 key
* 生成的 model 方法,参数: (params, successCb, [errorCb])
* 参数说明:
* params: 请求的参数
* successCb: 请求成功(HTTP 200)的回调函数
* errorCb: 请求失败(HTTP 非200)的回调函数
*/
var model = new Model(config)
model.getDomain({
domain_id: 1001
}, function(resp, isSucc){
console.log(resp)
}, function(error){
console.log(error)
})
model.addDomain({
domain: 'dnspod.cn'
}, function(resp, isSucc){
console.log(resp)
})
- 修正seajs下的兼容问题。
- 生成的 model 方法返回 jquery deferred 对象,支持 .done .fail .then 用法。
- 修正 model 模块定义写法。
- 生成的 model 方法,返回 jqXHR,可以使用 deferred
- 添加 headers 配置项
- 修正 xhrFields 配置的说明