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

request-h5

v1.2.20

Published

支持短路径的ajax

Downloads

11

Readme

request-h5

一套支持分组拦截器的 ajax框架

更新说明

  • +2019-10-26 增加全局设置 global
  • +2019-10-28 Ajax 增加原型方法 then
  • +2019-11-15 url开头出支持特殊参数传入 比如: 表示此次请求为 post
  • +2019-11-19 ajax.Request.prototype.load 方法
  • +2019-12-19 ajax.Request.prototype.shortcut 方法
  • +2019-12-20 shortcut 增加events参数

特点

  • 事件模型驱动;
  • ajax 分组支持;
  • 基于事件模型的拦截器,支持分组拦截器;
  • 支持 promise;
  • 灵活的默认配置,全局->分组->ajax;
  • 短路径支持,方便统一切换接口路径;
  • 提供实时获取服务器时间方法;
  • jsonp 和 fetch 支持。

安装

npm install request-h5 -- save

使用

import request from "request-h5"

三层结构

流程图

事件说明

| 事件名称 | 说明 | 参数 | | -------- | ---------------------------------------- | ----- | | timeout | 请求超时 | req | | callback | 请求完成 | res | | abort | 请求中止 | req | | verify | 验证数据 | res | | send | 请求发送 | req | | progress | 上传进度 | event | | open | send 之前,对传入的数据已经格式化完成 | req | | before | 最先触发的事件,req 中保存的数据相对原始 | req | | path | 对 url 格式化后触发 |

req.dataType 只有在 before 中能修改 req.isFormData 在 before 中无此属性

事件流程

新建一个分组

let ajaxOne = new ajax.Group()

添加事件拦截器

事件作用在一个分组上或者作用在单个请求上

// 这个事件作用在分组上
ajaxOne.on("open", req => {
    // 这个事件可以看做一个请求拦截器
});

ajaxOne.on("identity-err", () => {
    // 身份异常事件
});

ajaxOne
    .get("url", res => {
        // 这里的回调相当于ajaxOne.on("callback", res => {})

        // 这里可以触发自定义的事件
        res.root.emit("identity-err");
    })
    .on("open", req => {
        // 这个事件仅作用与当前请求,并且上面那个拦截器后触发
    });

// 更多参数设置,直接通过 setConf 来设置
ajaxOne
    .get("url", res => {})
    .setConf({
        type: "json"
    });

promise 支持

// 此时全局拦截器仍然有效
ajaxOne
    .fetch({
        url
    })
    .then(res => {
        // 当res.err 为 null
    })
    .catch(res => {
        // 当res.err 为 非null
    });

全局参数设置

ajax.Group.setConf({
    // 默认使用 fetch请求
    useFetch: true,
    // 返回资源类型为 json
    resType: "json",
    // jsonp的key为 callback
    jsonpKey: "callback"
});

短路径设置

ajaxOne.setConf({
    paths: {
        // 设置短路径
        webapi: "/data/api/"
    }
});

// 使用短路径
// webapi: 被替换为 /data/api/
ajaxOne.get("webapi:getuser.html", res => {}, { token: "----" });

服务器事件自动获取

// 这里返回服务器事件
ajaxOne.getDate();
ajaxOne.get(
    "webapi:getuser.html",
    res => {
        // 这里返回服务器事件
        res.getDate();
    },
    { token: "----" }
);

options 支持参数说明

| 名称 | 说明 | 默认值 | | --------------- | --------------------------------------------- | ----------- | | baseURL | 基础 url 路径 | 空字符串 | | paths | 短路径(替换 url 中的短路径) | 空对象 | | useFetch | 是否使用 fetch,如果浏览器不支持,则降级为 xhr | true | | url | 请求 url,支持短路径 | 空字符串 | | method | 请求方法 | GET | | dataType | 请求数据格式 | querystring | | resType | 返回数据格式 | json | | param | 请求参数 | null | | header | 请求头设置 | null | | jsonpKey | jsonp 请求是需要的 key | callback | | cache | get 请求是否有缓存 | true | | withCredentials | 跨域带上 cookie | false |

事件参数 req 说明

| 名称 | 说明 | 默认值 | | --------------- | ------------------------------------- | ----------------------------------------------- | | outFlag | ajax 已经中止,内部使用 | false | | method | 请求方法 | GET | | url | 请求 url | 空字符串 | | orginURL | 保存的是原始传入的 url | url | | formatURL | 格式化后(最终使用的)的 url | 短路径 -> 全路径 | | path | 短路径目录截取值 | 短路径 url 开头处 : 前面的字符,默认为 空字符串 | | cache | get 请求是否有缓存 | true | | resType | 请求类型 | 空字符串,默认为 querystring | | isFormData | 是否为 FormData 数据,针对非 GET 请求 | 按照 param 类型数据自动判定 | | param | 请求参数 | 空对象 | | header | 请求头 | 空对象 | | baseURL | 基础 url 路径 | 空字符串 | | isCross | 是否跨域 | 按照 url 路径自动判断 | | xhr | xhr 请求的对象 | | | withCredentials | 跨域带上 cookie | false |

事件参数 res 说明

| 名称 | 说明 | 默认值 | | -------------- | ----------------------------- | ------------------------- | | withReq | req 的引用 | req | | root | this 引用 | Ajax | | err | 错误内容 | 默认为 null,便是正确返回 | | json | json object | 空对象 | | text | 获取到的字符串 | 空字符串 | | result | 返回内容 | | | getHeader(key) | 获取 key 对应的 header | null | | cancel | 验证节点设置为 true,中止回调 | false | | status | 状态吗 | 0 | | getDate() | 获取服务器时间 | | | getJSON(key) | 获取 res.json 中的子字符串 | | | jsonKey | jsonKey 中的对象 | json |

  • 设置全局参数,作用于全局的默认参数

AjaxGroup 原型方法

setConf(options)

  • 当前分组实例的默认参数

create(options):Ajax

  • 当前分组下创建一个 ajax 请求
  • options 只作用于当前 ajax 请求
  • 返回当前 Ajax 的实例

fetch(options)

  • 当前分组下创建一个 ajax 请求,返回 Promise 对象

setDate(date:Date)

  • 设置服务器时间,一般内部使用

getDate():Date

  • 获取服务器时间

load(url[, callback, param]):Ajax get(url[, callback, param]):Ajax post(url[, callback, param]):Ajax put(url[, callback, param]):Ajax jsonp(url[, callback, param]):Ajax

  • 快捷方式加载

Ajax 原型方法

constructor(group[, options])

  • 构造方法
  • group 为属于的分组
  • options 为预设的参数

setConf(options)

  • 仅作用于当前 ajax 请求的参数

assign(key, value)

  • 扩展当前 ajax 参数
  • key 可以为 Object

abort()

  • 中止当前 Ajax 请求

timeout(ms, callback)

  • 超时中止

send(param, isOver)

  • 发送请求
  • param 请求参数
  • isOver, 如果当此 ajax 正在请求是,是否中止 默认 false,为新发送的请求丢失

then([resolve:function])

  • 返回 Promise 对象

emit(type, ...args)

  • 触发事件
  • type 事件名称
  • args 事件参数

emit(type)

  • 判断是否有此事件

on(type, eventcall)

  • 添加事件
  • type 事件名称
  • eventcall 事件函数

off(type[, eventcall])

  • 移除事件
  • type 事件名称
  • eventcall 事件函数
  • eventcall 不存在的时候,移除 type 对用的所有事件(不包含继承事件)

别名 get|post|put|jsonp(url, [callback:function, param:any])

  • ajax 请求别名
  • url 请求地址,支持短路径
  • callback 回调函数
  • param 参数
  • 返回 ajax 实例

全局设置

global.setConf(options) 配置全局默认参数 global.on(type, callback) 配置全局的事件 global.off(type) 销毁全局的事件