微信小程序坑点挖掘(一)关于接口404

828 阅读2分钟

这是我参与2022首次更文挑战的第8天,活动详情查看:2022首次更文挑战

一、前言

1.我之前写一个小项目的时候,需要后端提供的接口来加载一个页面的数据,通过wx.request的时候我发现调试器直接给我报了个500错误。修改了一下表头的之后,报了个404错误。。。(这个404是我的后端小伙伴返回的,并不是真的找不到)于是我修改了一下data里面的数值。

2.修改数值再调用发现始终是404,确定我这边是数据和url路径都没有错,经过几天苦苦思索,终于发现是session的问题,于是我通过缓存保持了登录状态终于请求成功。 如下是具体解决404可能有用的措施。

二、正确书写表头

关于第一个问题,是我data里面的参数写错了,没有按后端的文档写,同时,参数注意看清楚需要“”吗,这个“”困扰了我好久。 另外因为是POST请求,需要 把 ‘Content-Type’: ‘application/json’改成‘Content-Type’: ‘application/x-www-form-urlencoded’,前者用于GET后者用于POST。

三、保存session状态

wx.request({
      url: '后端给你的url地址',
      data:{
		//写想要传递给后端的数据
      },
      method:"POST",
      header:{
        "Content-Type": "application/x-www-form-urlencoded"//post请求必须加这个
      },
      success(res){
        console.log(res)
        if (res && res.header && res.header['Set-Cookie']) {//能拿到返回内容且拿到返回内容的header且拿到返回内容的header中的['Set-Cookie'],我们就移除原本在缓存中cookie
          wx.removeStorageSync('cookie')//移除缓存中已有的cookie,当然第一次可能没有
          wx.setStorageSync('cookie', res.header['Set-Cookie'])//把我们新拿到的表头放进去
        } else {
          console.log("we lost")
        }
        let cookie = wx.getStorageSync('cookie')//需要的时候从缓存拿到cookie
        app.globalData.cookey=cookie//把缓存拿到的cookie存到全局变量里就可以在其它函数的header中使用啦
        console.log(app.globalData.cookey)
      }
    })//以上就拿到了cookie

这种就是在url和参数没有问题的情况下,接口依然404或其它错误,可能是因为request每次调用都不会保存之前的session状态(就如果有些接口需要你登录后才允许调用的,你也会被视为没有登录而调用出错)。

header: { "Content-Type": "application/x-www-form-urlencoded", 'cookie': app.globalData.cookey }

拿到这个cookie我们就可以把它添加我们需要的接口的表头中了,至此,完成!