npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

igroot-fetch

v1.5.6

Published

iGroot 应用 API 层

Downloads

121

Readme

igroot-fetch

在基于 iGroot 构建的项目中发送 fetch 请求,有 restful 和 graphql 两种请求发送方式

安装

    npm install --save igroot-fetch
    或者
    bower install igroot-fetch
    或者
    yarn add igroot-fetch

使用

    const igrootFetch = require('igroot-fetch')
    或者
    import igrootFetch from('igroot-fetch')

restful 类型的请求

restful 类型的请求底层采用 axios 库,想要查看更详细的文档,可以参考 axios的官方文档

import igrootFetch from 'igroot-fetch'
const restApi = igrootFetch(baseUrl,config)

// 发送get请求
restApi.get(resourceUrl)
    .then(res=>{
        // 您的业务代码
    })

// 发送post请求
restApi.post(resourceUrl,paramsBody)
    .then(res=>{
        // 您的业务代码
    })

// 发送put请求
restApi.put(resourceUrl,paramsBody)
    .then(res=>{
        // 您的业务代码
    })

// 发送delete请求
restApi.delete(resourceUrl)
    .then(res=>{
        // 您的业务代码
    })

// 还有其余类型的请求可以参照 axios 的官方文档

graphQL 类型的请求

import igrootFetch from 'igroot-fetch'
const graphQLApi = igrootFetch(host+'/graphql',{
    handleHttpErrors: function (response) {
        notification.error({ message: 'Http Error', description: response.statusText })
        if (response.status === 401) {
            onTokenInvalid(domain)
        }
    },
    handleErrors: function (res) {
        notification.error(res.msg)
    }
})

// query
graphQLApi.query(`
{
    users{
        id
        name
    }
}`).then(res => {
        console.log(res)
    })

// mutate
graphQLApi.mutate(`
    {
        update_user(
            id:5,
            apps:[1,4,5]
        ){
            value
        }
    }
`).then(res => {
        console.log(res)
    })

开放的配置项

如有疑问可以直接咨询 范溢贞(tel:18106987196,qq:614235948)

| 参数 | 说明 | 类型 | 默认值 | -------- | -----: | :----: | :----: | | Authorization | 头部认证信息,默认从 localStorage 中取,因为如果你的系统有接入 SSO,SSO 会默认将 token 存入 localStorage | string | '' | needAuth| 是否需要在请求头中配置jwt认证信息,有的平台不需要Authorization认证信息,可以将这一项配置为false | boolean | true | needType| 是否需要 query 或 mutation 这两个关键字 | boolean | true | withCredentials | 发送请求时是否携带cookie | boolean | true | timeout | 请求超时时间设置,默认设置为1000ms | boolean | 1000 | handleNetErrors | 处理网络错误(网络错误:正式请求没有发出) | function | 见下方 | handleHttpErrors | 处理HTTP错误(状态码不为200 的错误) | function | 见下方 | handleErrors | 处理 业务逻辑 错误(code不为0 的错误) | function | 见下方 | handleSuccess | 成功后的反馈,一般不会用到 | function | -

// 默认 HTTP 错误处理: 状态码不为200 的错误
function handleHttpErrors(response) {
  if (response.status && response.status !== 200) {
    throw new Error(response)
  }
}
// 默认 业务 错误处理: code不为0 的错误
function handleErrors(res) {
  if (res.code && res.code !== 0) {
    const errText = res.msg || '业务错误!'
    throw new Error(errText)
  }
}
// 默认 网络 错误处理: 网络错误,正式请求没有发出
function handleNetErrors(err) {
  throw new Error('网络错误!')
}

特殊说明

  • 若 graphQL 接口有分支
    • 例如,请求路径为 APP_CONFIG.default.apiDomain + '/graphql',当前请求的是该接口的cmdb分支,则请求地址写成 APP_CONFIG.default.apiDomain + '/graphql/{type}/cmdb'

    备注:{type} 是 query 或者 mutation 这两个关键字的占位符

  • 针对 graphql 类型的请求,已经开放了请求撤销的功能,用法如下:
const myQuery = igrootFetch.query(`
    {users{id}}
`)
//在需要撤销这个请求的时候调用,即可撤回请求
myQuery.cancel()
  • 因为时间关系,暂未开放 restful 请求的撤回功能

  • V1.5.1 后兼容了两种版本的后端框架的错误处理,对1.4.5之前的用户有一个不兼容改动如下所示:

// 对原来的后端抛出的GraphQL错误,igroot-fetch默认处理如下,并从response中抛出 errors, data 供用户自定义处理
function handleGraphQLErrors(errors, data) {
  const { message } = errors[0]
  const error = new Error(`GraphQL Error: ${message}`)
  error.rawError = errors
  error.rawData = data
  throw error
}
// 现在取消了 所谓的 GraphQL错误 的说法,并合并处理所有的业务逻辑错误
// igroot-fetch默认处理如下,并从response中抛出 res(也就是{code,data,msg}) 供用户自定义处理
function handleErrors(res) {
  if (res.code && res.code !== 0) {
    const errText = res.msg || '业务错误!'
    throw new Error(errText)
  }
}
如果您要将您的igroot-fetch版本由V1.4.5之前升级为
V1.5.1以后,只需要将您配置项中的 handleGraphQLErrors 改为 handleErrors ,并将您在 handleGraphQLErrors 中使用的 errors, data 取消,改为使用{code,data,msg}来定义您的错误处理方式 即可

升级日志

  • 1.2.2

    • 去除默认的网络报错处理,改由用户自己设置handleHttpErrors函数来做报错处理
  • 1.2.3

    • 在返回结果中加上分页信息
  • 1.3.0

    • token实时从 localStorage 中读取
  • 1.3.1

    • restful部分改用axios;
  • 1.3.2

    • 添加 needType 配置项,用于判断发送请求时是否需要在请求地址后面添加 query 或者 mutation 这两个关键字的占位符
  • 1.3.3

    • 修复 localStorage 中不存在 token 时获取失败的容错处理
  • 1.3.10

    • 修复 localStorage 中不存在 token 时获取失败的容错处理;添加 needType 配置项
  • 1.4.0

    • 恢复setDomain方法
  • 1.4.1

    • 去掉打印日志的语句
  • 1.4.2

    • 增加 returnCompleteResponse 配置项:满足响应的code为0需要取得完整响应体的需求
    • 增加 getDomain 方法,取得 domain 变量
  • 1.4.3

    • 修复 将extra变量移到send函数内部
  • 1.5.2

    • 开放 超时时间设置 和 请求撤回(graphql类型请求) 功能
    • 兼容 新旧两个后端框架 的业务错误处理
  • 1.5.3

    • err回传
  • 1.5.4

    • 在控制台打出文档链接
  • 1.5.5

    • 上一版忘记转译了,很尴尬
  • 1.5.6

    • 默认的 validateStatus 配置为 200 到 500