求助:call failed:, { errMsg: "request:fail invalid url "classic/200/1/favor""}
来源:10-2 解决缓存带来的问题

每天一个八公里
2023-03-19
为了解决缓存中 classic 的 like_status 和 fav_nums 不是最新数据的问题,我采用了以下逻辑来实现,但却爆出了标题中的错误,研究了一上午,实在找不到问题出在哪里,向老师求助,具体情况如下:
业务逻辑是这样的,在调用本地缓存 classic 进行页面渲染前,先确认本地是否存在该 key 名称的缓存,如果存在,则以 classicModel 中定义的以下函数向服务器请求最新的 like_status 和 fav_num 并且更新在本地缓存的 classic 中。
以下是 pages/classic/classic.js 实现业务逻辑的代码:
updataClassic(event) {
let isPrevious = event.detail.isPrevious
let index = this.data.classic.index
let key = classicModel._getKey(isPrevious?index-1:index+1)
// 如果缓存中存在该 classic, 则向服务器请求最新的 like_status 和 fav_nums 信息更新到缓存中相应的 classic
if(wx.getStorageSync(key)) {
let classic = classicModel._getClassicFromStorage(key)
let type = classic.type
let id = classic.id
classicModel.updataLikeStatus(type, id, (res) => {
console.log(res)
// classic.like_status = res.like_status
// classic.fav_nums = res.fav_nums
})
wx.setStorageSync(key, classic)
}
// 如果缓存中存在该 classic 则调用缓存中的数据
if(wx.getStorageSync(key)) {
this.setData({
classic: classicModel._getClassicFromStorage(key),
first: classicModel.isFirst(isPrevious?index-1:index+1),
latest: classicModel.isLatest(isPrevious?index-1:index+1)
})
}
// 当前期刊不在缓存中则向服务器请求数据并将数据存储在缓存中
else
{
classicModel.getClassic(index, isPrevious, (res) => {
this.setData({
classic: res,
first: classicModel.isFirst(res.index),
latest: classicModel.isLatest(res.index)
})
wx.setStorageSync(key, res)
})
}
},
但始终无法得到预期结果。通过在 sCallback 中打印 res 发现,调用 classicModel 的 updataLikeStatus 方法返回的 res 是 undefined,同时控制台报出了标题中的错误
console报错:
call failed:, {errno: 600009, errMsg: "request:fail invalid url "classic/200/1/favor""}
我理解它是说“classic/200/1/favor”这个地址不正确,但这个 API 文档中规定的格式一样(GET classic/int:type/int:id/favor),type 和 id 的数据类型也都是 Int,各种测试研究了一上午,实在找不到到底问题出在哪里了,向老师求助。
以下是 classicModel 的 updataLikeStatus 方法的定义:
updataLikeStatus(type, id, sCallback) {
wx.request({
url: `classic/${type}/${id}/favor`,
method: 'GET',
success: (res) => {
sCallback(res)
}
})
}
1回答
-
每天一个八公里
提问者
2023-03-19
终于一步一步排查出问题所在了:
1. 当我测试发现在 updataLikeStatus 内部的 url 参数给定完整地址的时候,报错就不一样了,报错为 401,提示 appKey 不正确;
2. 检查并确认了 HTTP 对 config.js 文件的引用,以及 classicModel 对 HTTP 的引用,都没有错
3. 测试在 updataLikeStatus 内部通过 header 载入 appKey,错误消失
4. 综上,看来是 updataLikeStatus 通过 HTTP 对 config.js 引用时发生的错误,由于第二部的确认,可以断定是 updataLikeStatus 引用 HTTP 过程发生了错误
5. 回顾头来再仔细一看,原来是 updataLikeStatus 中引用 HTTP 的 request 方法时,把 this 写成了 wx,变成了调用 wx.request 接口
6. 把wx.request 改成 this.request 问题解决了
总结:使用父类方法时,记住加“this.”。
10
相似问题