微信小程序-接口wx.uploadFile 上传文件后返回不是JSON对象

最近接触到微信小程序接口开发工作,前端小伙伴提醒我上传文件接口返回的是文字,而不是json对象,如下图:

上面一个红框是普通接口返回的内容,下图是微信上传图片返回的内容。很显然普通接口自动反序列化成了json对象,wx.upload方法没有自动反序列化。所以用一种周全的方法解决此问题

wx.uploadFile({
      url: url,
      filePath: audioFile,
      name: 'audioFile',//这里是上传音频文件类型,按照需求填写
      header: {
        "Content-Type": "multipart/form-data",
        'accept': 'application/json',
      },
      formData: {
        'token': token,  //其他额外的formdata,按需求来
      },
      success: function (res) {
        let data = res.data;
        // 为什么这么这么写,看下文
        if ('object' !== typeof data) {
          //坑一:与wx.request不同,wx.uploadFile返回的是[字符串],需要自己转为JSON格式
          //如果不转换,直接用点运算符是获取不到后台返回的值的
          let data = JSON.parse(data)
          let status = data.status;
        } else {
          let status = res.status;
        }
        // todo 写你的业务代码了
      }
})

推荐大家写的时候加上'object' !== typeof data,防止微信在今后版本修复这个bug,导致你的代码会报错,推荐大家这么写

参考资料:http://www.majianwei.com/archives/8732