当前位置: 首页 > 软件库 > 程序开发 > 网络工具包 >

retrofit-cjs

基于 JavaScript 装饰器的网络请求库
授权协议 MIT
开发语言 JavaScript
所属分类 程序开发、 网络工具包
软件类型 开源软件
地区 国产
投 递 者 章高朗
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

retrofit-cjs 是一个基于 JavaScript 装饰器(Decorator)和 axios 实现的网络请求库, 支持 Vue / React / react-native 等常用框架, 支持node.js 。

使用方法

1. 安装

npm i retrofit-cjs --save

Babel 转码器的支持安装 babel-plugin-transform-decorators-legacy

npm i babel-plugin-transform-decorators-legacy -Dnpm i babel-plugin-transform-decorators-leg

配置 .babelrc 文件

"plugins": ["transform-decorators-legacy"]

如果是使用 create-react-app 创建的项目,需要先弹出 webpack 配置

npm run eject

安装 babel-plugin-transform-decorators-legacy,在 package.json 中配置 babel

"babel": {
    "presets": [
        "react-app"
    ],
    "plugins": [
        "transform-decorators-legacy"
    ]
  }

vue-cli3 已默认支持 Decorator。

2. 引入 retrofit-cjs

import { GET, POST, Headers } from 'retrofit-cjs';

修饰器

属性方法修饰器

类修饰器

  • @Create

    • 创建新的请求实例,后续其他操作都依赖与创建的实例,默认使用全局的请求实例。可配置请求基础信息,也可通过 @Config 和 @Headers 完成基础信息配置

  • @Config

    • 配置全局请求信息,若使用了 @Create 则作用与当前请求对象,否则作用与全局对象

  • @Headers

    • 配置全局请求头信息,若使用了 @Create 则作用与当前请求对象,否则作用与全局对象

  • @AddReqInterceptor 添加请求拦截器

  • @AddResInterceptor 添加响应拦截器

一些工具修饰器

  • @Debounce 防抖

        @Debounce(1000) // 1秒防抖
        @Debounce(1000, true) // 1秒防抖, 立即执行

  • @Throttle 节流

        @Throttle(1000, {leading: false}) // 忽略开始函数的的调用
        @Throttle(1000, {trailing: false}) // 忽略结尾函数的调用
  • @Timer 定时操作

        @Timer(1000) // 延迟1秒执行
        @Timer(1000, true) // 延迟1秒执行, 立即执行修饰函数

  • @Interval 定时操作

        @Interval(1000) // 每隔1秒执行一次
        @Interval(1000, true) // 每隔1秒执行一次, 立即执行修饰函数

  • @Autobind 自动绑定方法(到当前对象)

  • @RetroPlugin Vue 插件:全局配置网络请求

3. 使用

1.推荐用法

@AddResInterceptor((res)=>{
    // response result
    return res;
}, (error)=>{
    // response error
})
@Config({timeout: 2000})
@Header({'User-Agent': 'request'})
@Create({
    baseURL: 'https://cnodejs.org/api',
    timeout: 1000,
    headers: {
        'X-Custom-Header': 'foobar'
    }
})
class TopicApi{
    static getInstance(){
        return new TopicApi();
    }

    @Cancel((cancel) => {
        // cancel();
    })
    @Config({timeout: 1000})
    @Header({'User-Agent': 'request'})
    @GET('/v1/topics')
    // @GET('/v1/{0}', 'topics')
    // @GET('https://cnodejs.org/api/v1/topics')
    // @GET({url: '/v1/topics', params: {limit: 10}})
    getTopicList(res){
        // 处理结果
        return res;
    }

    @Debounce(2000)
    // @HTTP({
    //     url: '/v1/topic/5433d5e4e737cbe96dcef312',
    //     method: 'get',
    //     params: {}
    // })
    @GET('/v1/topic/{topicId}')
    getTopicDetails(res){
        // response result
    }

    // 以表单方式提交数据
    @FormUrlEncoded
    @POST('/user')
    // @POST({url: '/user', data: {id: 1, name: 'glang'}})
    addUser(res) {

    }
}

let topicApi = TopicApi.getInstance();
// topicApi.getTopicDetails('topicId=5433d5e4e737cbe96dcef312', {
//     limit: 20
// });
// 参数会按 {} 自动匹配
topicApi.getTopicDetails({
    topicId: '5433d5e4e737cbe96dcef312',
    limit: 20
});
topicApi.addUser({id: 1, name: 'glang'});

2.react / react-native

import {Interval, Autobind} from './lib/utils';

@Create({
    baseURL: 'https://cnodejs.org/api'
})
class App extends Component{
    constructor(props) {
        super(props);
        // this.countdwon = this.countdwon.bind(this);
    }

    @GET('/v1/topics')
    getTopicList(res){
        // 处理结果
        
    }

    @Autobind
    @Interval(1000, 60 * 1000)
    countdwon(){

    }
}

3.vue

export default {
  name: "app",
  mounted() {
    this.getList();
  },
  methods: {
    // @Config 只影响当前网络请求
    @Config({
        baseURL: 'https://cnodejs.org/api',
        timeout: 1000 
    })
    @GET("/v1/topics")
    getList(res, err) {
        //
    }
  }
}

@RetroPlugin

使用Vue插件配置请求基本信息

// 入口文件
import Vue from 'vue'
import {RetroPlugin} from './lib/utils';

Vue.use(RetroPlugin, {
    baseURL: 'https://cnodejs.org/api',
    timeout: 1000,
    headers: {
        'X-Custom-Header': 'foobar'
    }
});

@AddReqInterceptor

@AddReqInterceptor((request)=>{
    request.transformRequest = [function (data) {
        let ret = ''
        for (let it in data) {
            ret += encodeURIComponent(it) + '=' + encodeURIComponent(data[it]) + '&'
        }
        return ret
    }]
    return request;
})
class TopicApi{
    ...
}
  • 修饰器 修饰器是一个 JavaScript 函数(建议是纯函数),它用于修改类属性/方法或类本身。修饰器提案正处于第二阶段,我们可以使用 babel-plugin-transform-decorators-legacy 这个 Babel 插件来转换它。 类修饰器 @Dec class Topic{ } function Dec(target){ target.type = 'Topic

  • Hi all i am trying to send base64 encoded image as string in request paramters from my app. It give me 400 and bad request error can any one please help me to sort this out Here is the retrofit reques

  • 目录 Retrofit简介 Retrofit2使用 Retrofit注解介绍 请求参数注解 Retrofit简介 Retrofit是Square公司出品的网络请求封装库,注意是封装框架,不是网络请求框架;Retrofit底层网络请求是通过OKHttp实现的,Retrofit只是在此基础上做了很好的封装,使其更好用,更方便,更强大,而且能很多开源库(比如:GSON,Rxjava)配合使用;把网络请求

  • Retrofit mRetrofit = new Retrofit.Builder() .baseUrl(HttpConfig.BASE_URL) .addConverterFactory(GsonConverterFactory.create())//添加gson转换器 .addCallAdapterFactory(RxJava2CallAdapterFactory.create())//添加r

  • 1. 动态代理机制分析 Retrofit已经诞生好几年了,从诞生开始一直都是Android应用开发最流行的网络请求框架,准确来说,是网络请求框架一个巧妙的包装。 动态代理可以说是Retrofit中的核心机制,正如官网所说,Retrofit最大的特点,在于可以用一个Java interface通过注解去表示一个Http请求。 我们先来看一个最简单的动态代理例子,感受下通过动态代理将一个普通Java接

  • Retrofit+RxJava优雅的处理服务器 返 回异常、错误 异常&错误 实际开发经常有这种情况比如登录请求接口返回的信息包括请求返回的状态失败还是成功错误码 Us er对象等等。如果网络等原因引起的登录失败可以归结为异常如果是用户信息输入错误导致的登录失败算是错误。 假如服务器返回的是统一数据格式 *标准数据格式 */public class Response{public i

  • 导入的依赖 compile 'com.github.bumptech.glide:glide:3.7.0' compile 'com.squareup.okhttp3:okhttp:3.9.0' compile 'com.google.code.gson:gson:2.8.1' compile 'com.jakewharton:butterknife:8.5.1'

  • 前言 最近接触android中js与java交互的东西很多,当然它们之间的交互方式有几种,但是我觉得这几种交互方式都存在一定的不足,这是我决定编写SimpleJavaJsBridge这个库的关键原因。 我会按以下顺序进行本文章: 现有js与java通信方案及不足 js与java完美通信方案设计 SimpleJavaJsBridge 现在进入正题 1. 现有js与java通信方案及不足 先来说明一点

  • C语言 第六章 多重循环练习 一.循环输入 #include "stdio.h" void main() { char c; do { printf("我告诉你1+1=2\n"); prin ... Leetcode Combination Sum Given a set of candidate numbers (C) and a target number (T), find all uniq

  • 查看项目请点击这里:项目地址 这里lambda需要java8的支持,先来配置一下环境 在app包下的那个build.gradle中加入如下代码 compileOptions{ sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } 看一

  • Mvp_view void success(int type,String data); void fail(int type,String error); Mvp_model interface CallBackListEner{ void success(int type,String data); void fai

 相关资料
  • 本文向大家介绍Android基于OkHttpUtils网络请求的二次封装,包括了Android基于OkHttpUtils网络请求的二次封装的使用技巧和注意事项,需要的朋友参考一下 OkHttpUtils网络请求为什么进行二次封装? 1、减少代码量 2、后期换网络处理框架方便 二次封装的实现原理 1、将网络请求提取在一个方法中 2、对里面的可变参数,可以通过参数传递过去,也可以提供一个set方法传递

  • 本文向大家介绍关于ajax网络请求的封装实例,包括了关于ajax网络请求的封装实例的使用技巧和注意事项,需要的朋友参考一下 实例代码: 以上这篇关于ajax网络请求的封装实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持呐喊教程。

  • Mpx提供了网络请求库fetch,抹平了微信,阿里等平台请求参数及响应数据的差异;同时支持请求拦截器,请求取消等 使用说明 import mpx from '@mpxjs/core' import mpxFetch from '@mpxjs/fetch' mpx.use(mpxFetch) // 第一种访问形式 mpx.xfetch.fetch({ url: 'http://xxx.com' }

  • 本文向大家介绍基于Python 装饰器装饰类中的方法实例,包括了基于Python 装饰器装饰类中的方法实例的使用技巧和注意事项,需要的朋友参考一下 title: Python 装饰器装饰类中的方法 comments: true date: 2017-04-17 20:44:31 tags: ['Python', 'Decorate'] category: ['Python'] --- 目前在中文网

  • 本文向大家介绍基于 IntelliJ IDEA 模拟 Servlet 网络请求示例,包括了基于 IntelliJ IDEA 模拟 Servlet 网络请求示例的使用技巧和注意事项,需要的朋友参考一下 最近观看 Android 开发视频,里面使用的集成开发工具为 Eclipse 。使用 Eclipse 可以很快捷的编写 Web 项目,而我使用的 Androi Studio 因为专业就把建立其他工程的

  • 本文向大家介绍Angular网络请求的封装方法,包括了Angular网络请求的封装方法的使用技巧和注意事项,需要的朋友参考一下 很多时候,我很喜欢angular的编码风格,特别是angular支持typescript之后,完整的生命周期,完美的钩子函数,都是别的语言所无法替代的。 这里我来说说我自己的网络请求封装,某种意义上来说,angular自己的网络请求封装的很好的,我们没有必要再来画蛇添足,