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

@compass-aiden/telegram

v2.3.1

Published

基于 Axios 封装的Http请求模块

Downloads

65

Readme

@compass-aiden/telegram

基于 Axios 封装的Http请求模块

Getting Started

web项目使用

npm方式安装:

npm install @compass-aiden/telegram

// 自动识别导入esm文件
import Telegram from '@compass-aiden/telegram';
// 通过别名路径导入esm文件
import Telegram from '@compass-aiden/telegram/esm';

浏览器script标签安装:

<!-- 请根据个人需求采用unpkg或者jsdelivr链接 -->
<script src="https://unpkg.com/@compass-aiden/telegram@latest/dist/main.umd.js"></script>
<script>
  console.log(window['@compass-aiden/telegram']);
</script>

node项目使用

npm方式安装:

npm install @compass-aiden/telegram

// 自动导入cjs文件
const Telegram = require('@compass-aiden/telegram');

/** 在type: module启用ESM环境下,请参考如下方式 */
// 通过别名路径导入cjs文件,如果不能识别条件导出,tsconfig可设置 `{ "moduleResolution": "bundler" }`
import Telegram from '@compass-aiden/telegram/cjs';
// 自动导入默认cjs文件, 当 tsconfig 配置包含 `{ "moduleResolution": "NodeNext" }`时可用
import Telegram from '@compass-aiden/telegram';

用法演示

import Telegram from '@compass-aiden/telegram';

/**
 * const telegram = new Telegram([option]) 注册默认域配置
 * telegram.register('domain', [option]) 注册新的domain业务域配置
 *
 * 默认域及register注册的新域基础配置都包含如下内容,可被配置项二次合并或覆盖:
 *  {
 *    timeout: 1000 * 10,
 *    headers: {
 *      'Content-Type': 'application/json;charset=utf-8',
 *    },
 *    responseType: 'json',
 *  },
 */
const api = new Telegram()
  // 注册 gatewayB 域的配置
  .register('gatewayB', {
    baseURL: 'https://api.test.com/api',
  })
  // 注册拦截器的演示域
  .register('interceptor', {
    baseURL: 'https://api.qqsuu.cn/api',
    interceptors: {
      request: [
        async (req) => {
          console.log('第一个异步拦截器Req: ', req);
          req.test = 'interceptor 1';
          return req;
        },
        (req) => {
          console.log('第二个同步拦截器Req: ', req);
          req.test2 = 'interceptor 2';
          return req;
        },
        (req) => {
          console.log('最终req为: ', req);
          return req;
        },
      ],
      requestError: (error) => {
        console.log('发生了请求前的未知异常: ', error);
        throw error;
      },
      response: [
        (data, res) => {
          if (res.config.customMeta?.skipResponseInterceptor) {
            console.log('接收到跳过拦截器的配置');
            return res;
          }
          if (res.status >= 200 && res.status < 300) {
            return data;
          }
          throw new Error('异常');
        },
        (data, res) => {
          if (res.config.customMeta?.skipResponseInterceptor) {
            console.log('接收到跳过拦截器的配置');
            return res;
          }
          if (data?.code === 200) {
            return data.data;
          }
          throw new Error(data?.msg || '业务异常');
        },
      ],
      responseError: (error) => {
        console.log('请求级异常发生', error);
        // return { test: 'test' } // 如果不throw异常,则此行会将该对象作为返回值
        throw error;
      },
    },
  })
  // 请求编码 域配置演示
  .register('serializer', {
    // 统一对请求进行编码处理
    paramsSerializer: (params) => {
      return Qs.stringify(params, { arrayFormat: 'brackets' });
    },
  });

// 使用底层API直接请求
api
  .request({
    url: 'https://api.test.com/api/demo',
  })
  .then((result) => console.log(result));

// 使用底层API采用gatewayB域直接请求并取消
// 请求取消测试
const cancelExample = api.request({
  domain: 'gatewayB', // 指定域配置
  url: 'demo',
});
cancelExample.then((result) => console.log(result));
cancelExample.abort(); // 可以在合适的时机取消未完成的请求

// 使用链式请求
api
  .chain()
  .get('https://api.test.com/api/demo')
  .request()
  .then((result) => console.log(result));

// 使用链式请求配置路径参数,url查询参数,body参数
api
  .chain()
  .get('https://api.test.com/api/:test')
  .path('test', 'dm-xjj')
  .searchParams({ type: 'json2' })
  .body({ test: 'test' })
  .request()
  .then((result) => console.log(result));

// 拦截器演示
api
  .chain()
  .domain('interceptor')
  .post('demo')
  .request()
  .then((result) => console.log(result));

// 自定义跳过拦截器
api
  .chain()
  .domain('interceptor')
  .post('demo')
  .config({ customMeta: { skipResponseInterceptor: true } })
  .request()
  .then((result) => console.log(result));

// 接口异常重试
api
  .chain()
  .post('demo')
  .retry(3)
  .request()
  .then((result) => console.log(result));

// 接口异常重试,自定义重试间隔
api
  .chain()
  .post('demo')
  .retry({
    retries: 3,
    // 自定义延时
    retryDelay: (count) => 1000 * count,
  })
  .request()
  .then((result) => console.log(result));

更多链式用法参考以下链的声明:

declare class TelegramChain {
  /** 用于在链条末尾发起请求 */
  request<Result = any>(): Promise<Result> & {
    abort: Function;
  };
  /** 设置请求异常重试 */
  retry(option: number | HttpTelegramReqConfig['axios-retry']): this;
  /** 设置路径参数 */
  path(key: string, value: string): this;
  /** 批量设置路径参数 */
  paths(data: Record<string, string>): this;
  /** 采用指定业务域的配置 */
  domain(domain: string | symbol): this;
  /** 设置url参数 */
  searchParams(params: any): this;
  /** 设置请求体参数 */
  body(data: any): this;
  /** 设置请求头信息 */
  headers(headers: Partial<HttpTelegramReqConfig['headers']>): this;
  /** 设置自定义元数据 */
  customMeta(data: HttpTelegramReqConfig['customMeta']): this;
  /** 设置响应数据类型 */
  responseType(type: HttpTelegramReqConfig['responseType']): this;
  /** 直接设置更多的请求配置 */
  config(config: Partial<HttpTelegramReqConfig>): this;
  /** 设置请求url,并指定为 get 请求 */
  get(url: string): this;
  /** 设置请求url,并指定为 post 请求 */
  post(url: string): this;
  /** 设置请求url,并指定为 delete 请求 */
  delete(url: string): this;
  /** 设置请求url,并指定为 put 请求 */
  put(url: string): this;
  /** 设置请求url,并指定为 head 请求 */
  head(url: string): this;
  /** 设置请求url,并指定为 options 请求 */
  options(url: string): this;
  /** 设置请求url,并指定为 patch 请求 */
  patch(url: string): this;
  /** 设置请求url,并指定为 purge 请求 */
  purge(url: string): this;
  /** 设置请求url,并指定为 link 请求 */
  link(url: string): this;
  /** 设置请求url,并指定为 unlink 请求 */
  unlink(url: string): this;
}

Contributes

Install

pnpm install

Base commands

  • pnpm dev 启用开发模式
  • pnpm build 生产构建
  • pnpm lint 代码校验
  • pnpm format 代码格式化
  • pnpm test 执行单元测试
  • pnpm build:doc 构建文档