Skip to content

microud/fishing

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Fishing

Fishing 是一个使用装饰器来实现 HTTP API 请求封装的库,基于 axios 实现,兼容浏览器端与 Node 端。

在这里,网络请求像钓鱼一样,通过装饰器表明鱼儿的样子,便能得到自己想要的了。

Features

  • 使用装饰器进行定义
  • 支持文件上传
  • 统一配置 axios 实例

Installation

# use npm
npm i -S fishing-request
# or use yarn
yarn add fishing-request

Usage

Decorator

所有的装饰器都有一个 Fish 前缀,主要是为了避免与一些框架基础库中的 GetPost 等关键词的装饰器重复,如我在使用的 NestJS。 如果觉得不会有冲突且多写前缀有些麻烦,建议在引入的时候重命名为 Get 等关键词。

@FishPond()

FishPond() 是一个属性装饰器,顾名思义,这是你即将使用的「鱼塘」,它用于指明类中的某个属性的值(string 类型)为整个类中请求的 Base URL。

class DemoRequest {
  @FishPond()
  base: string;
}

此装饰器可以省略,如果不提供鱼塘,那么每次请求便依赖 URL 完整了。

FishRequest(config: AxiosRequestConfig)

FishRequest() 是一个方法装饰器,是最基础的请求方法。传入平时习惯使用的 axios 请求参数即可。

class DemoRequest {
  @FishPond()
  base = 'http://127.0.0.1';

  @FishRequest({ url: '/basic' })
  async basicRequest(): Promise<AxiosResponse> { return; }
}
请求参数

FishHeaders()

使用 FishHeaders() 标记的参数,会被作为此次请求的 Header,如果是上传文件的请求,则会将该对象与 FormData 的请求头进行合并。

FishParams

使用 FishParams() 标记的参数,会对 URL 进行处理,替换掉对应的占位符:

import { FishRequest } from './decorators';

class DemoRequest {
  @FishRequest({ url: 'http://127.0.0.1/user/:id' })
  async paramRequest(@FishParams() param: { id: string }): Promise<AxiosResponse> { return; }
}

FishQuery()

使用 FishQuery() 标记的参数会处理为 axios 的 params,也就是一次 HTTP 请求中的 QueryString。

FishBody(contentType: string)

FishBody() 中的参数会被作为请求中的请求体,它的参数用于决定此次请求的 Content-Type,目前支持的值有:

  • text
  • json 请求头为 application/json,且将参数对象转为 JSON 字符串
  • form:以 FormData 的形式发送请求,也可以用于上传文件

FishResponse(dataType: string)

在使用时可以通过 FishResponse() 标记参数并将相应数据进行处理,以返回处理过的响应数据。如果不进行标记,则返回值为原始的 axios 响应对象。

class DemoRequest {
  async getMethod(@FishResponse() response: AxiosResponse<any>): Promise<string> {
    return response.data.msg;
  }
}

FishBody() 类似的,FishResponse() 也支持通过不同的参数返回不同的数据类型。

FishGet()

FishGet() 是对 FishRequest() GET 方法的封装,旨在简化方法的定义,它支持两种形式的重载:

  • FishGet(url: string, config: AxiosRequestConfig)
  • FishGet(config: AxiosRequestConfig)

除此之外,使用装饰器定义参数等与 FishRequest() 完全一致。

FishPost()

FishPost() 是对 FishRequest() POST 方法的封装,使用方法与 FishGet() 完全一致。

  • FishPost(url: string, config: AxiosRequestConfig)
  • FishPost(config: AxiosRequestConfig)

FishPut()

FishPut() 是对 FishRequest() POST 方法的封装,使用方法与 FishGet() 完全一致。

  • FishPut(url: string, config: AxiosRequestConfig)
  • FishPut(config: AxiosRequestConfig)

FishDelete()

FishDelete() 是对 FishRequest() POST 方法的封装,使用方法与 FishGet() 完全一致。

  • FishDelete(url: string, config: AxiosRequestConfig)
  • FishDelete(config: AxiosRequestConfig)

更多的使用用例,可以查看 test/ 目录下的测试 Demo。

About

A high-level packaging for axios.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published