2.0.1 • Published 4 years ago

beyond-remote v2.0.1

Weekly downloads
10
License
MIT
Repository
github
Last release
4 years ago

beyond-remote

用于封装 fetch 的请求,此库依赖 promise 和 fetch

旧浏览器推荐使用 es6-promise ,ie8 还需要引入 es5-shim

require('es6-promise').polyfill()

fetch 推荐使用 whatwg-fetch

如果要支持 IE8 ,请使用 fetch-ie8

基本使用

import Remote from 'beyond-remote'

// 默认值
const remote = new Remote({
	basePath : '',
	requestJSON : true,
	responseJSON : true,
	timeout : 10,
	autoTransform : false,
	dataType : 'json',  // json/text/formData/blob/arrayBuffer
	credentials : 'same-origin'
})


const getUsers = remote.create({
	url : '/user/list'
})


getUsers().then(function(json){
	console.log(json)
}).catch(function(error){
    console.log(error)
})


// json 方式提交参数
const getUser = remote.create((id)=>{
	return {
		url : '/user/detail',
		requestJSON : true,
		body : {id}
	}
})

getUser(1).then(function(json){
	console.log(json)
}).catch(function(error){
      console.log(error)
})

// form 方式提交参数
const getUser = remote.create((id)=>{
	return {
		url : '/user/detail',
		requestJSON : false,
		body : {id}
	}
})

// 自定义提交参数
const getUser = remote.create((id)=>{
	return {
		url : '/user/detail',
		requestJSON : false,
		body : 'id=' + id
	}
})



// 文件图片上传
const uploadAvatar = remote.create((body)=>{
	return {
		url : '/user/uploadAvatar',
		requestJSON : false,
		body : new FormData
	}
})

// 自定义 headers
const getUser = remote.create((id)=>{
	return {
		url : '/user/detail',
		headers : {'content-type' : 'application/json'},
		body : {id}
	}
})

API

new Remote(options : Options)

remote.create(options : Options )

remote.create(()=> Options )

remote.setBase(options : Options )

Options 参数值

方法类型默认值说明
urlstring-请求的url,会与 basePath 做拼接
basePathstring-每一个 Remote 实例的 basepath ,会与 url 拼接
requestJSONbooleantruerequestJSON 为 true 且没有手动设置content-type的情况下, 会设置请求头 content-type 为 application/json ,并会将 object 类型的 body 通过 JSON.stringify 转化 json 格式字符串
responseJSONbooleantrueresponseJSON 为 true 且没有手动设置content-type的情况下, 会设置请求头 Accept 为 application/json
timeoutnumbernumber超时设置,单位为秒,默认为 10,设置0为不限制超时
dataTypestring/false设置返回数据的转换,默认为 json,支持 json/text/formData/blob/arrayBuffer/false;设置为 false 时,可以获取原始 response
remoterany设置返回数据的转换,默认为 json,支持 json/text/formData/blob/arrayBuffer

更多 options 请参考 fetch 的第二个参数对象,关于 fetch 接口的时候,请参考 这个API很“迷人”——(新的Fetch API)

高级

锁定和延时

使用锁定可以避免短时间内多次重复发起请求,如表单提交等业务场景

// sendMessageFn 方法会在第一次请求执行时锁定,后面的两次请求不会发生,在第一次执行开始的 60 秒后会可以再次执行
import Remote from 'beyond-remote'
import {lock} from 'beyond-lib/lib/lock'
var remote = new Remote
var sendMessage = remote.create({
	url : '/sendMessage',
	body : {content : 'hello'}
})

var sendMessageFn = lock(function(){
	sendMessage()
},60)

sendMessageFn()
sendMessageFn() // 无效
sendMessageFn() // 无效

setTimeout(()=>{
	sendMessageFn() //有效
},60000)

使用延时可以避免短时间内多次重复发起请求,如输入搜索等业务

// searchFn 方法会在连续请求后的最后一次请求,如果1秒钟之内再没请求,则执行
import Remote from 'beyond-remote'
import {delay} from 'beyond-lib/lib/delay'
var remote = new Remote
var search = remote.create({
	url : '/search',
	body : {content : 'hello'}
})

var searchFn = delay(function(){
	search()
},1)

searchFn() // 无效
searchFn() // 无效
searchFn() // 1秒后执行

注册事件

事件分为 Remote 级别和 remote 实例级别,前者针对所有的,后者针对 一个 remote 实例下创建的 remoter

import Remote from 'beyond-remote'
const remote = new Remote()
function handler(e){
	console.log(e.type)
}

var Remoteoffstart =  Remote.on('start',handler)
var Remoteoffsend =  Remote.on('send',handler)
var Remoteoffsuccess =  Remote.on('success',handler)
var Remoteofferror =  Remote.on('error',handler)
var Remoteoffcomplete =  Remote.on('complete',handler)

var remoteOffstart =  remote.on('start',handler)
var remoteOffsend =  remote.on('send',handler)
var remoteOffsuccess =  remote.on('success',handler)
var remoteOfferror =  remote.on('error',handler)
var remoteOffcomplete =  remote.on('complete',handler)

e : Event

方法类型默认值说明
typestring-start,send,success,error,complete
okboolean-请求返回的状态码status,当 200 <= status < 300 为 true,当 type 为 start 和 send 该值为 undefined
errorError-fetch 请求失败的 Error 对象,start 和 send 该值为 undefined
responseResponse-response 对象,start 和 send 时,该值为 undefined
remoterany-当前请求函数,也可在创建的时候指定

事件发生顺序依次为 start -> send -> success/error -> complete

在事件类型方法里面,response 为同一实例,必须对 response 对象进行clone 再使用,见如下代码

Remote.on('success',(e)=>{
	if(e.response){
		e.response.clone().json().then((res)=> console.log(res) )
	}
})

使用 TypeScript

interface Data{
	success : true,
	data : []
}

const getData = remote.create<Data>({url : '/getData'})

getData()


const getUserById : (id : string)=> Promise<Data>  = remote.create((id)=>({url : `/getUser/${id}`}) )

getUserById(1)


const getImage : (src : string)=> Promise<Response>  = remote.create((src)=>({url : src,dataType : false}) )

getImage()
.then((res)=>{
	res.blob()
})
.then((blob)=>{
	let src = URL.createObjectURL(blob)
	let img = new Image
	img.src = src
})
2.0.1

4 years ago

2.0.0

4 years ago

1.1.4

4 years ago

1.1.3

4 years ago

1.1.2

5 years ago

1.0.2

5 years ago

1.0.1

5 years ago

1.0.0

6 years ago

0.12.0

6 years ago

0.11.1

7 years ago

0.11.0

8 years ago

0.10.1

8 years ago

0.10.0

8 years ago

0.9.0

8 years ago

0.8.2

8 years ago

0.8.1

8 years ago

0.8.0

8 years ago

0.7.4

8 years ago

0.7.3

8 years ago

0.7.2

8 years ago

0.7.1

9 years ago

0.7.0

9 years ago

0.6.0

9 years ago

0.5.1

9 years ago

0.5.0

9 years ago

0.4.9

9 years ago

0.4.8

9 years ago

0.4.7

9 years ago

0.4.6

9 years ago

0.4.5

10 years ago

0.4.4

10 years ago

0.4.3

10 years ago

0.4.2

10 years ago

0.3.2

10 years ago

0.3.1

10 years ago

0.3.0

10 years ago

0.2.0

10 years ago

0.1.2

10 years ago

0.1.1

10 years ago

0.1.0

10 years ago