# @gopowerteam/http-request

> ---

Latest version **0.4.7** (published 2022-08-17) · MIT license · 0 weekly downloads

## Install

```sh
npm install @gopowerteam/http-request
pnpm add @gopowerteam/http-request
yarn add @gopowerteam/http-request
bun add @gopowerteam/http-request
```

## Health

**Score 25/100 (F)** — status: abandoned.

Positive: has types; esm support; no vulnerabilities.

Warnings: low downloads; pre 1.0.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.4.7 |
| Published | 2022-08-17 |
| First published | 2021-05-06 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | bundled |
| Module format | ESM + CommonJS |
| Dependencies | 5 |
| Unpacked size | 115.6 KB |
| Known vulnerabilities | 0 (+26 in 2 direct dependencies) |
| Install scripts | no |
| GitHub stars | 3 |
| Author | zhuchentong |
| Maintainers | zct1989 |
| Keywords | gopowerteam, http-request |

## Links

- npm: https://www.npmjs.com/package/@gopowerteam/http-request
- Repository: https://github.com/gopowerteam/package.http-request
- Issues: https://github.com/gopowerteam/package.http-request/issues
- npm.io page: https://npm.io/package/@gopowerteam/http-request

## Dependencies (5)

- [qs](https://npm.io/package/qs.md) 6.10.1
- [axios](https://npm.io/package/axios.md) 0.24.0
- [@types/qs](https://npm.io/package/@types/qs.md) 6.9.7
- [reflect-metadata](https://npm.io/package/reflect-metadata.md) ^0.1.13
- [class-transformer](https://npm.io/package/class-transformer.md) 0.5.1

## Alternatives

- [launchdarkly-js-client-sdk](https://npm.io/package/launchdarkly-js-client-sdk.md) — 2.5M weekly downloads
- [@elastic/elasticsearch](https://npm.io/package/@elastic/elasticsearch.md) — 2.1M weekly downloads
- [@c8y/client](https://npm.io/package/@c8y/client.md) — 15.3K weekly downloads
- [@signaldb/maverickjs](https://npm.io/package/@signaldb/maverickjs.md) — 1.7K weekly downloads
- [@bbc/http-transport-cache](https://npm.io/package/@bbc/http-transport-cache.md) — 1.2K weekly downloads

## Recent versions

- 0.4.7 (latest) — 2022-08-17
- 0.4.6 — 2022-01-01
- 0.4.5 — 2021-12-28
- 0.4.4 — 2021-11-30
- 0.4.3 — 2021-09-17
- 0.4.2 — 2021-09-16
- 0.4.1 — 2021-09-16
- 0.4.0 — 2021-09-08
- 0.3.6 — 2021-09-06
- 0.3.5 — 2021-09-03
- 0.3.4 — 2021-09-03
- 0.3.3 — 2021-09-03
- 0.3.2 — 2021-09-02
- 0.3.1 — 2021-09-02
- 0.3.0 — 2021-08-30
- … 16 more at https://npm.io/package/@gopowerteam/http-request/versions

## README

# @gopowerteam/http-request
---

[![npm version](https://img.shields.io/npm/v/@gopowerteam/http-request.svg?style=flat-square)](https://www.npmjs.org/package/@gopowerteam/http-request)
[![install size](https://packagephobia.now.sh/badge?p=@gopowerteam/http-request)](https://packagephobia.now.sh/result?p=@gopowerteam/http-request)


基于`rxjs`,`axios`的网络请求封装,返回`Observable`对象,便于操作.

## 目录
---

  - [特性](#特性)
  - [安装](#安装)
  - [示例](#示例)
  - [自定义拦截器](#自定义拦截器)
    - [状态拦截器](#状态拦截器)
    - [成功拦截器](#成功拦截器)
    - [失败拦截器](#失败拦截器)
  - [异常处理](#异常处理)
  - [扩展服务支持](#扩展服务支持)
  

## 特性
---

* 基于`axios`进行封装操作
* 请求流程基于`rxjs`进行封装
* 使用`Controller`,`Service`进行配置,便于重复调用
* 支持自定义拦截器操作
* 支持请求服务扩展

## 安装
---

```shell
// yarn use
# yarn add @gopowerteam/http-request

// npm use
# npm install @gopowerteam/http-request --save
```

## 示例
---

```typescript
// config.ts
import { RequestService } from '@gopowerteam/http-request';

// 配置服务端信息
RequestService.setConfig({
    server: 'http://api.test.com/',     // 设置请求地址
    timeout: 3000                       // 设置请求超时
})
```

```typescript
// user.controller.ts

import { RequestMethod } from '@gopowerteam/http-request'

export const UserController = {
    login: {
        controller:'user',
        path: '/api/user/login',
        action: 'login',
        type: RequestMethod.Post
    }
}
```

```typescript
// user.service.ts
import { Request, RequestParams } from '@gopowerteam/http-request'
import { Observable } from 'rxjs'
import { UserController } from '../controllers/test.controller'

export class UserService {
    @Request({
        server: UserController.login
    })
    public login(
        requestParams: RequestParams
    ): Observable<any> {
        return requestParams.request()
    }
}
```

```typescript
// index.ts
const userService = new UserService()

userService.login(new RequestParams()).subscribe({
    next: data => {
        console.log(data)
    }
})
```

[完整示例](https://github.com/gopowerteam/package.http-request/tree/master/example)

## 自定义拦截器
---

### 状态拦截器

状态拦截器函数负责判断网络请求是否成功,如`state为200`或`data.success为true`,

```typescript
// 配置状态拦截器
RequestService.interceptors.status.use(respone => {
    return true
})
```
### 成功拦截器

成功拦截器用于确认网络请求成功后返回的数据结构

```typescript
// 添加成功拦截器
RequestService.interceptors.success.use(respone => {
    return respone.data
})
```

### 失败拦截器

失败拦截器用于确认网络请求失败后返回的数据结构

```typescript
// 添加失败拦截器
RequestService.interceptors.error.use(respone => {
    return respone
})
```

## 网络异常处理
---

通过设置`requestCatchHandle`可以设置全局异常处理

```typescript
RequestService.requestCatchHandle = respone => {
    const defaultError = '服务通讯连接失败'
    const messageList = {
        400: '请求参数错误',
        405: '请求服务方法错误',
        500: '服务器内部错误',
        403: '没有权限，请重新登陆'
    }

    if (respone) {
        const responseMessage = (respone.data || {}).message
        const errorMessage =
            responseMessage || messageList[respone.status] || defaultError

        if (respone.status === 403) {
            console.error(respone.data)
        }

    } else {
    }
}
```
## 扩展服务
---

扩展服务支持对请求进行前置或后置的修改,可以通过定义`before`和`after`来进行前置或后置的操作,可以对发送数据进行修改.扩展服务支持全局安装和单请求安装.

```typescript
import { ExtendService } from '@gopowerteam/http-request'

export class TokenService extends ExtendService {
    public before = (params: any) => {
        const userid = '001'

        if (userid) {
            params.options.header = params.options.header || {}
            params.options.header['X-UserID'] = userid
        }
    }

    public after = (data: any, params) => {
        //
    }
}

// 全局安装扩展服务
RequestService.installExtendService(new TokenService())

// 单请求安装扩展服务
userService.login(new RequestParams({},{
    token:new TokenService()
}}})).subscribe({
    next: data => {
        console.log(data)
    }
})
```

---
_Source: https://npm.io/package/@gopowerteam/http-request · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
