🚨 Active Supply Chain Attack:node-ipc Package Compromised.Learn More
Socket
Book a DemoSign in
Socket

@bbfe/data-provider

Package Overview
Dependencies
Maintainers
4
Versions
15
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@bbfe/data-provider

request manager with AOP interceptors

latest
Source
npmnpm
Version
1.0.3
Version published
Maintainers
4
Created
Source

Data provider [NEW]

基于Fetch规范的请求处理模块,提供对Request和Response对象的切面,具备请求合并的能力。

  • Fetch_API
  • 旧版 data-provider

Install

npm install @bbfe/data-provider

Quick Start

import DataProvider from 'data-provider';
import pathToRegexp from 'path-to-regexp';
import { isObject } from 'lodash';

let baseURL = 'http://mock.bbfe.group/mock/5a1e89e8d3ef9a75725992d3/snc/api/v1';
let id = 0;

const urlCompiler = (path, params) => {
  let url = pathToRegexp.compile(path)(params);
  return url;
};

let dataProvider = new DataProvider({
  timeout: 5000,
  requestIdResolver: function(options) {
    return options.method === 'GET' ? JSON.stringify({ options }) : id++;
  }
});

dataProvider.addRequestInterceptor(request => {
  console.log('--------------request:', request);
  return request;
});

dataProvider.addResponseInterceptor(response => {
  console.log('--------------response:', response);
  return response;
});

const request = async (url, method, body, query) => {
  let options = {
    url,
    method,
    baseURL: baseURL || '',
    headers: {
      'Content-Type': 'application/json'
    }
  };
  if (body) {
    options.body = isObject(body) ? JSON.stringify(body) : body;
  }
  if (query) {
    options.query = query;
  }
  let res = await dataProvider.request(options);
  if (res instanceof Error || res.status === 204) {
    return res;
  } else {
    return res.clone().json();
  }
};


async getAdmin({ path, params }) {
  let url = urlCompiler(path, params);
  let data = await request(url, 'GET');
  return data;
}

getAdmin({ path: '/admins/:adminId', params: { adminId: 1 } })
.then(data => {
  if (data instanceof Error) {
    console.log(data.toString());
  } else {
    conselo.log(data);
  }
});

Options

new DataProvider(options)

初始化DataProvider 实例需要的参数如下:

参数名默认值参数类型说明
timeout5000Number请求超时的时间
requestIdResolver() => id++Function用于产生请求id的策略函数,如果多个请求的id相等,则这几个请求会被合并。

dataProvider.request(options)

DataProvider实例发起请求时需要的参数如下:

参数名默认值参数类型说明
url-(必传)string资源的URL(包含param)
headers{'Accept':'application/json, text/plain, */*'}object请求头,Accept已经默认加上了。
method'GET'string请求的方法
baseURL-string提供了这个参数的话,他会被拼接到url的前面
body-string/object请求数据,可以是Blob, BufferSource, FormData, URLSearchParams, 或 USVString对象(from mdn
query-string/objectquery参数,会被拼接到url的后面
mode'cors'string请求的模式, 比如 cors, no-cors, same-origin, 或 navigate。默认值应该为 cors。(from mdn
credentials'include'string想要在请求中使用的credentials:: omit, same-origin, 或 include。data-provider将其默认设为了include,即一直会带上cookie。如果不希望这样,需要自行将其设为omit。
cache'default'string请求中想要使用的cache mode。(from mdn
redirect'follow'string对重定向处理的模式: follow, error, or manual。(from mdn
referrer'client'string可选值no-referrer, client, 或一个 URL的 USVString 。(from mdn
integrity-string包括请求的 subresource integrity 值(from mdn

除此之外,options也可以是一个Request对象,如果直接传入Request对象的话,data-provider会直接以这个Request对象发起请求。

Noticifications

  • 请确保body中的内容与headers里的Content-Type是对应的,否则可能会出现请求发送失败的情况,新版data-provider默认只添加'Accept'的相关headers。
  • 如果业务中需要针对不同的Content-Type对body进行序列化处理,如有需求, 可引入qsjquery-param等包。
  • 发送请求时,参数可能会包括param、query、body,其中param应该在传入url时就已经拼接在url里面了,只有query和body才应该以参数的形式传入。
  • query应该是个单层对象或字符串,如 { type: 'super', group: 1 } 或 'type=1&group=super' 或 '?type=1&group=super'。
  • data-provider.request返回的是一个Response对象,需要按业务需求对其执行json化或者其他操作(详细内容请参考mdn对Response的描述)。
  • cookie默认是一直会带上的,如果不希望带cookie,需要自行在options中将'credentials'设为'omit'。

Keywords

fetch

FAQs

Package last updated on 28 Dec 2017

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts