open-index/open-npm huggingface dataset:
npm package: @liaoyunong/dataservice
Description: Http Request created by fetch API
Author: Yunong Liao
Latest version: 1.0.0

dataService
=======
#### 用fetch发起网络请求

## 安装
```javascript
yarn add @liaoyunong/dataservice // 建议使用 yarn 安装

```
## Import

    import { getJSON } from '@liaoyunong/dataservice'

## 使用
####  1. POST
```javascript
getJSON( url, params )  // parmas 为可选项
	.then((data)=>{
		// to do when request succeeded
		onsuccess();
	})
	.catch((err)=>{
		// to do when request failed
		onerror();
	})
```
**注：**对于多层结构的 params 使用了类 jquery.param 方法处理，参考 [jQuery.param()](http://api.jquery.com/jQuery.param/)
####  2. GET
```javascript
getJSON( url, params, { method: "GET" } )
	.then(onsuccess) // 即 data => success(data)
	.catch(onerror) // 即 err => onerror(data)
```
####  3. Upload
```javascript
// 新建 formData 将 media 标签内取出的 Blob 对象 append 到 formData 内
let uploadFile = new FormData()
uploadFile.append( 'file', input.files[0] )
uploadFile.append( 'name', 'userIcon' )

// uploadFile 为 formData
getJSON( url, uploadFile )
	.then(onsuccess) // 即 data => success(data)
	.catch(onerror) // 即 err => onerror(data)
```
####  4. JSONP
**需单独引入 getJsonp 方法**

    import { getJsonp } from '@liaoyunong/dataservice'
```javascript
getJsonp( url )
	.then(( json, response ) => {
	   console.log(json) // response.json() 解析后的对象，如 {title: '获取学员信息', userName: 'mercury'}
	   console.log(response) // 请求返回的完整相应
	})
	.catch(onerror) // 即 err => onerror(data)
```
## 配置
#### 1. request
- 默认值

```javascript
if (typeof req_params == 'string') {
    contentType = 'application/json';
}
else {
    contentType = "application/x-www-form-urlencoded; charset=UTF-8";
}
const options = {
    method: 'POST',
    headers: {
       'Accept': 'application/json, text/javascript, */*; q=0.01',
       'Content-Type': contentType,
       'X-Requested-With': 'XMLHttpRequest'
   },
    credentials: 'same-origin',
    cache: 'no-cache'
};
// FormData
delete options.headers; //fetch 会自动添加相应的content-type 为 multipart/form-data; boundary=...
```
- 配置

```javascript
const options = {
    method: 'GET',
    headers: {
       'Accept': 'image/gif',
       'Content-Type': contentType, // 一般不需要，有特殊需要则配置
    },
    /**
    JsonDTO: {    // 可选配置，配置成功则对本次请求生效，不影响全局JsonDTO设置
        flag: 'rs',
        message: 'rsmsg',
        data: 'rsdata'
    }
    JsonDTO: 'RAW' // 配置为RAW后，本次请求会在resolve时拿到完整的数据，全局JsonDTO将在本次请求中失效
    **/
};
getJSON( url, params, options )
```
#### 2. response
- 默认值

```javascript
const JsonDTO = {
    flag: 'flag',
    message: 'message',
    data: 'data'
};
// 默认解析的 response 字段

const successFlag = 1; // 成功
const failFlag = 0; // 失败
// 标志位值

const extraFlagMissions = [];
// 额外的 flag 和 mission [{flag: -1, mission: (data, resData) => console.log(data, resData)}]

const badStatus = [];
// 如果请求失败，配置返回状态对应的回调 [{status: 401, callback: () => window.location.href = '#/login'}]
```
- 配置

```javascript
// 均为可选项
const resParams = {
    JsonDTO,
    successFlag,
    failFlag,
    extraFlagMissions,
    badStatus,
}
getJSON.initHttpDTO(resParams); // 将配置对象传入
```