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

@oys/http-module

v1.0.30

Published

javascript starter project

Downloads

46

Readme

http 请求封装库

基于Axios 封装的http请求库

安装

npm i @oys/http-module or npm i --save @oys/http-module

使用方法

import { createHttp } from '@oys/http-module';

// create http-module instance
const $http = createHttp(httpConfig);

// get method
$http.get(url, config).then(res => res).catch(e => e);

// post method
$http.post(url, data, config).then(res => res).catch(e => e);

// put method
$http.put(url, data, config).then(res => res).catch(e => e);

// delete method
$http.delete(url, config).then(res => res).catch(e => e);

// request method
$http.request(config).then(res => res).catch(e => e);

httpConfig 说明

{
  // `url` 是用于请求服务器的地址, 即可以是相对地址, 需要配合baseURL。也可以是绝对地址
  url: '/user',

  // `method` 是 请求使用的方法类型, 常用的get, post, put, delete, 默认get
  method: 'get', // default

  // `baseURL` 如果url不是绝对地址, 那么baseURL会和url进行拼接。
  // 可以设置baseURL来传递相对的url
  // 例如: baseURL: 'https://some-domain.com/api/', url: '/list/{id}/resource'
  // http-module 请求的url地址为: https://some-domain.com/api/list/{id}/resource
  baseURL: 'https://some-domain.com/api/',

  // `transformRequest` 允许每次将数据发送至服务器前对数据进行修改
  // 它只适用 put, post, patch 请求方法
  // 数组中的最后一个方法必须返回一个字符串或者一个Buffer, ArrayBuffer的实例
  transformRequest: [function (data, headers) {
    // Do whatever you want to transform the data

    return data;
  }],

  // `transformResponse` 允许在请求响应后, 对响应的数据进行修改
  transformResponse: [function (data) {
    // Do whatever you want to transform the data

    return data;
  }],

  // `headers` 是要发送的自定义headers
  headers: {'X-Requested-With': 'XMLHttpRequest'},

  // `params` 是要发送请求的URL参数
  // 它应该是一个Plain Object 或者 一个 URLSearchParams Object
  params: {
    ID: 12345
  },

  // `paramsSerializer` 是一个可选的函数, 它是负责序列化 `params` 参数
  // (e.g. https://www.npmjs.com/package/qs, http://api.jquery.com/jquery.param/)
  paramsSerializer: function(params) {
    return Qs.stringify(params, {arrayFormat: 'brackets'})
  },

  // `data` 是作为请求主体时发送的数据对象
  // 只适用于 put, post, patch 请求方法
  // 当没有设置 `transformRequest`时, data必须是以下类型:
  // - string, Plain Object, ArrayBuffer, ArrayBufferView, URLSearchParams
  // - 浏览器环境允许: FormData, File, Blob
  // - Node环境允许: Stream, Buffer
  data: {
    firstName: 'Fred'
  },

  // `timeout` 指定了请求超时前的毫秒。
  // 如果这个请求超过了指定时间,它会被终止
  timeout: 1000,

  // `withCredentials` 是跨站点访问控制的请求开关
  withCredentials: false, // default

  // `adatper` 允许自定义处理请求
  // 返回一个 Promise 或者 一个有效的 Response (see lib/adapters/README.md)
  adapter: function (config) {
    /* ... */
  },

  // `auth` 表示应该使用Http Baseic auth, 并提供证书
  // 它会设置 `Authorization` header 覆盖原来存在的
  // `Authorization` 使用了自定义 headers 你应该使用 `headers`参数。
  auth: {
    username: 'janedoe',
    password: 's00pers3cret'
  },

  // `responseType` 表示服务器响应的数据类型
  // 选项有: arraybuffer, blob, document, json, text, stream
  responseType: 'json', // default

  // `responseEncoding` 表示用于Response 解码类型
  // 注意: 它会忽略 stream 类型的responseType 的客户端请求
  responseEncoding: 'utf8', // default

  // `xsrfCookieName` 是用于作为xsrf token值的名称
  xsrfCookieName: 'XSRF-TOKEN', // default

  // `xsrfHeaderName` 是http header中携带xsrf token值的名字
  xsrfHeaderName: 'X-XSRF-TOKEN', // default

  // `onUploadProgress` 是处理上传进度事件的监听回调
  onUploadProgress: function (progressEvent) {
    // Do whatever you want with the native progress event
  },

  // `onDownloadProgress` 是 处理下载进度事件的监听回调
  onDownloadProgress: function (progressEvent) {
    // Do whatever you want with the native progress event
  },

  // `maxContentLength` 定义http response 内容大小(单位字节)
  maxContentLength: 2000,

  // `validateStatus` 定义Http Response状态码是属于`Promise.resolve`或`Promise.reject`。
  // 如果 `validateStatus` 返回 true(或者是`null`或`undefined`), Promise将会执行resolved,
  // 否则 Promise将执行rejected
  validateStatus: function (status) {
    return status >= 200 && status < 300; // default
  },

  // `maxRedirects` 定义在Node.js环境中最大重定向数量
  // 如果设置0, 将不会重定向
  maxRedirects: 5, // default

  // `socketPath` 在Node.js环境中定义一个UNIX Socket。
  // e.g. '/var/run/docker.sock' to send requests to the docker daemon.
  // 只能指定 `socketPath` 或 `proxy`。
  // 如果2个都指定, 则`socketPath`优先被使用。
  socketPath: null, // default

  // `httpAgent`和`httpsAgent` 在Node.js环境定义一个自定义agent,被分别使用在执行http和https请求中
  // `keepAlive` 默认未启用-
  httpAgent: new http.Agent({ keepAlive: true }),
  httpsAgent: new https.Agent({ keepAlive: true }),

  // `proxy` 定义代理服务的hounane和prot
  // 使用`false`可以禁用代理,忽略环境变量值
  // `auth` 表示应该使用Http Basic auth来连接代理,并且提供证书
  // 它会设置一个 `Proxy-Authorization` header,覆盖原有的存在
  // `Proxy-Authorization` 是自定义headers你应该设置`headers`参数
  proxy: {
    host: '127.0.0.1',
    port: 9000,
    auth: {
      username: 'mikeymike',
      password: 'rapunz3l'
    }
  },

  // `cancelToken` 指定一个取消token,它可以用来取消request
  // (有关详情,请看取消reqeust部分)
  cancelToken: new CancelToken(function (cancel) {
  })
}

Response 模型

{
  // `data` 是服务器提供的Response数据
  data: {},

  // `status` 是来自服务器Response的HTTP的状态码
  status: 200,

  // `statusText` 是来自服务器Response的Http状态码信息
  statusText: 'OK',

  // `headers` 是服务器Response的heade信息集合
  // 所有 header 名字都是小写 
  headers: {},

  // `config` 是由reqeust提供给`axios`的配置
  config: {},

  // `reqeust` 是创建该Response的reqeust
  // 在Node.js环境中, 它是一个last ClientRequest实例
  // 在Browser环境中, 它是一个XMLHttpRequest实例
  request: {}
}

拦截器

用户可以在reqeusth或response前拦截它们, 并做所需的业务处理

// 添加 response 拦截
$http.addResponseInterceptor(function onSuccess (response) {
    return response;
}, function onFailre (error){
    return Promise.reject(error)l
})

// 添加 request 拦截
$http.addRequestInterceptor(function onSuccess (config) {
    return config;
}, function onError (error) {
    return Promise.reject(error)
})

取消请求

你可以使用一个 cancel token 取消一个 reqeust

你可以创建一个 cancel token, 使用Http.getCancelMethod, 代码如下所示:

import Http, { createHttp } from '@oys/http-module';

const $http = createHttp({});
const source = Http.getCancelMethod();

$http.get(`/list/123/resource`, {
    cancelToken: source.token
}).catch(e => {
    if (Http.isCancel(e)) {
        console.lg('Request Cancel');
    }
})

$http.post(`/user/forget`, {
    name: 'xxxx',
    password: '*****'
}, {
    cancelToken: source.token
});

source.cancel('Operation canceled by User');

你也可以创建一个执行CancelToken的执行函数,将 cancel token 传递出来

const CancelToken = Http.CancelToken
let cancel = null;
$http.get(`/user/111`, {
    cancelToken: new CancelToken(function executor (c) {
        cancel = c;
    })
});

cancel()

快速开发

git clone [email protected]:ouyangshan09/httpModule.git 

or

git clone https://github.com/ouyangshan09/httpModule.git

npm i

1、项目安装

  • 执行 npm install 命令

2、开发时调试

  • 执行 npm start 命令

3、测试

  • 执行 npm run test 命令

4、项目构建

  • 执行 npm run build 命令

5、清理 dist 文件夹

  • 执行 npm run clean 命令

6、预编译vendors库

  • 执行 npm run dll 命令

项目介绍

目录结构

react                   react项目根目录
  ├─config              配置目录
  ├─dist                生产目录
  ├─lib                 第三方依赖库
  ├─node_modules
  ├─scripts             执行脚本目录
  ├─src                 开发目录
  ├─plugin              插件目录
  ├─.babelrc            babel配置文件
  ├─.eslintignore       eslint忽略配置文件
  ├─.eslintrc.js        eslint配置文件
  ├─.gitignore          文件忽略配置
  ├─.gitlab-ci.yml      gitlab持续集成配置
  ├─.npmrc              npm配置
  ├─.stylelintignore    stylelint忽略配置
  ├─.stylelintrc        stylelint配置
  ├─CHANGELOG           版本变更日志
  ├─CONTRIBUTING.md
  ├─package.json
  ├─postcss.config.js   postcss配置文件
  ├─README.md

TODO

  • [] 将@oys/http-module的静态方法和实例方法分离
  • [] 将@oys/http-module转为typescript实现