luch-request 是一个基于Promise 开发的uni-app跨平台、项目级别的请求库,它有更小的体积,易用的api,方便简单的自定义能力。
1. 如果cli 用户npm 引入报错?
插件使用es6,es7 开发,好处就是结构清晰,语义化,开发代码少,并且对于目前的我来说,完全没有必要使用es5开发。
为什么不用babel解决:babel 编译后的代码对uni的条件编译注释不友好。如果不用条件编译则不能发挥最大优势。
这样存在的问题:对于HBuilderX 创建的项目完全没有影响,idea 会对node_modules 里的插件条件编译,并且babel。主要是cli 用户,cli 不会对node_modules 里的代码babel。
可尝试如下配置
// vue.config.js
module.exports = {
transpileDependencies: ['luch-request']
}
2. 为什么会请求两次?
如果其中有options
请求:本地访问接口时跨域请求,所以浏览器会先发一个option 去预测能否成功,然后再发一个真正的请求
。(自己观察请求头,Request Method,百度简单请求
)
3. 如何跨域?
问的人不少,可以先百度了解一下。如何跨域
4. TypeError: undefined is not an object (evaluating ‘this.$http.get’)
不知道为啥问的人这么多?太基础了,百度学习一下 export default 和export,头大。import { http } from '@/utils/luch-request/index.js'
5. 什么参数需要在setConfig
设置?什么参数需要在request
拦截器设置?
setConfig
适用于设置一些静态的/默认的参数;比如header 里的一些默认值、默认全局参数(全局请求配置)。token
并不适合在这里设置。interceptors.request
拦截器适用范围较广,但我仍然建议把一些静态的东西放在setConfig
里。拦截器会在每次请求调用,而setConfig
仅在调用时修改一遍。
6. 如何jwt无痛刷新?
7. 如何配置超时时间?
全局
网络请求的 超时时间 可以统一在 manifest.json 中配置 networkTimeout
插件的全局配置超时时间:插件-全局请求配置-timeout。必须请求方法和终端支持timeout
,支持度参照timeout 支持度
局部
局部配置项timeout
:timeout。必须请求方法和终端支持timeout
,支持度参照timeout 支持度
如果终端和请求方式不支持timeout
,可参考如下实现
http.request({
method: 'POST', // 请求方法必须大写 [GET|POST|PUT|DELETE|CONNECT|HEAD|OPTIONS|TRACE]
url: '/user/12345',
data: {
firstName: 'Fred',
lastName: 'Flintstone'
},
params: { // 会拼接到url上
token: '1111'
},
// 返回当前请求的task, options。请勿在此处修改options。非必填
getTask: (task, options) => {
// 500ms 后终止请求
setTimeout(() => {
task.abort()
}, 500)
}
})
8. 发送FormData?
uni 不支持发送FormData
对象
对于 POST 方法且 header[‘content-type’] 为 application/json 的数据,会进行 JSON 序列化。
对于 POST 方法且 header[‘content-type’] 为 application/x-www-form-urlencoded 的数据,会将数据转换为 query string。
所以,如果你想发送formData 类型数据,请将header['content-type']
设置为 application/x-www-form-urlencoded
。
如果你的formData 里有file
怎么办?请使用插件的upload方法。
更多问题,访问luch-request 官网了解更多。
能不能增加请求缓存功能?比如get一些已请过&短期不会变化的数据,可以直接返回,不用跟服务端交互
这个功能场景并不是很通用,并且实现起来也比较简单,不会放到请求库了。
1. 可以利用强制缓存和协商缓存。服务端针对特定接口返回对应响应策略
2. 自己在请求拦截器实现一下
不知道为啥 微信小程序请求接口拿不到返回数据 在request哪里貌似有报错下一句执行不了 但是catch没捕获到,H5正常
你好 遇到同样问题 请问你解决了嘛