# norse_tools

> javascript tools

Latest version **1.0.2-6** (published 2021-04-22) · ISC license · 0 weekly downloads

## Install

```sh
npm install norse_tools
pnpm add norse_tools
yarn add norse_tools
bun add norse_tools
```

## Health

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

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 1.0.2-6 |
| Published | 2021-04-22 |
| First published | 2021-04-21 |
| Weekly downloads | 0 |
| License | ISC |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 0 |
| Unpacked size | 9.1 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Author | norse1022 |
| Maintainers | norse1022 |
| Keywords | wxRequest, tools |

## Links

- npm: https://www.npmjs.com/package/norse_tools
- npm.io page: https://npm.io/package/norse_tools

## Recent versions

- 1.0.2-6 (latest) — 2021-04-22
- 1.0.2-5 — 2021-04-22
- 1.0.2-4 — 2021-04-22
- 1.0.2-3 — 2021-04-22
- 1.0.2-2 — 2021-04-22
- 1.0.2-1 — 2021-04-22
- 1.0.2-0 — 2021-04-21
- 1.0.1 — 2021-04-21
- 1.0.0 — 2021-04-21

## README

# norse tools

## 简介
  个人工具初始版本， 当前仅提供wxRequest拦截器工具

## 工具wxRequest
wxRequest 是一个基于 wx.request进行封装的一个拦截器配置工具，它有如下特点：

1. 轻量且非常轻量 。
2. 仅支持WX小程序 运行环境
3. 支持请求／响应拦截器。
4. **支持中断、锁住、解锁请求。**

### 安装

使用NPM

```shell
npm install norse_tools
```

### 引入wxRequest

   ```javascript
   var WXRequest=require("norsr_tools/wxRequest/WXRequest") 
   var http=new WXRequest()
   ```

### 配置config

  ```javascript
  http.config({
    baseURL: '',
    method: 'POST',
    timeout: 5000,
    header: {
      'Content-Type': 'application/x-www-form-urlencoded'
    }
  })
  ```  

### 拦截器

wxRequest支持请求／响应拦截器，可以通过它在请求发起之前和收到响应数据之后做一些预处理。

```javascript

//添加请求拦截器
wxRequest.interceptors.request.use((config)=>{
    //给所有请求添加自定义header
    config.header["sysCode"]="JD";
    return config;
})

//添加响应拦截器，响应拦截器会在then/catch处理之前执行
wxRequest.interceptors.response.use(
    (response) => {
        //只将请求结果的data字段返回
        return response.data
    },
    (err) => {
        //发生网络错误后会走到这里
        //return Promise.resolve("ssss")
    }
)
```

**请求拦截器**中的request对象结构如下：

```javascript
{
  baseURL,  //请求的基地址
  header, //自定义的请求头
  method, // 请求方法
  timeout, //本次请求的超时时间
  url, // 本次请求的地址
  data, //url get参数(post请求或默认的get参数)    
  ... //options中自定义的属性
}
```

**响应拦截器**中的response对象结构如下：

```javascript
{
  data, //服务器返回的数据
  request  //本次响应对应的请求信息，即上面的request结构
}
```

### 在拦截器中执行异步任务

现在，您可以在拦截器中执行异步任务了!

下面我们看一个例子：由于安全原因，我们需要所有的请求都需要在header中设置一个`csrfToken`，如果`csrfToken`不存在时，我们需要先请求一个`csrfToken`，然后再发起网络请求，由于请求`csrfToken`是异步的，所以我们需要在拦截器中执行异步请求，代码如下：

```javascript
var csrfToken="";
var http=new WXRequest();
http.interceptors.request.use(function (request) {
  log(`发起请求：path:${request.url}，baseURL:${request.baseURL}`)
  if (!csrfToken) {
    log("没有token，先请求token...");
    //锁定当天实例，后续请求会在拦截器外排队
    http.lock();
    // 异步请求内容
    // .....
    // .....

    http.unlock();//解锁后，会继续发起请求队列中的任务
  } else {
    request.header["csrfToken"] = csrfToken;
  }
})
```

注意：

1. 当前wxRequest实例会在调用`http.lock`时会被锁定，fly实例锁定后，接下来的请求在进入请求拦截器前会进入一个队列排队，当解锁后(通过调用`http.unlock`)，才会进入拦截器，这提供一种同步多个任务的方式。
2. 只有当最终返回`request`对象时(拦截器传递给你的回调参数)，请求才会继续（如代码中注释）， 否则将会把返回的值作为本次请求。


### 取消当前未完成的同url请求

下面我们看一个例子：列表数据频繁切换筛选条件情况下要取消上一次请求，我们只需要在options `（http.request(options)）`中配置cancelRequest: true即会自动取消当前未完成的同url请求 ，代码如下：

```javascript
var http=new WXRequest();
http.request({
  url: 'http://xxx.a.com:/api/xxx',
  cancelRequest: true
})
```

_注意： 仅配置cancelRequest为true的请求才会进入自动取消未完成请求序列_

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