返回

uni-app前端如何调用uniCloud后端接口(imgSecCheck踩坑)

前端

uniCloud 简介

uniCloud 是由DCloud推出的一个云开发平台,它可以帮助开发者快速构建和部署云端应用。uniCloud 提供了丰富的云函数、云存储、云数据库等服务,开发者可以使用这些服务来构建各种各样的云端应用。

uniCloud 使用体验

小程序云开发还算挺火的,我也去尝试了一下,确实是非常省事,比如以前获取 openid,获取小程序码之类的接口都需要通过后端,用小程序云开发的话直接调用 API 就可以拿到了。这意味着咱前端也可以独立开发一个完整的小程序了,迈向全栈的一个近道~~

uniCloud 你可以理解为跟 uni-app 是一个厂商的,所以它们之间的适配性是非常好的,uni-app 中直接提供了一个 uniCloud 模块,可以让我们很方便地调用 uniCloud 的云函数。

使用场景

在项目中,我需要对用户上传的图片进行安全检查,以防止用户上传一些不合适的内容。

imgSecCheck 踩坑

uniCloud 提供了一个 imgSecCheck 云函数,可以对图片进行安全检查。在使用这个云函数时,我遇到了一个坑:

uniCloud.callFunction({
  name: 'imgSecCheck',
  data: {
    file: 'cloud://xxx.jpg'
  }
}).then(res => {
  console.log(res)
})

调用这个云函数时,我传入了一个图片的路径,但返回结果却是一个错误:

{
  "code": 1011,
  "message": "The parameter 'img_url' in path must be String."
}

这个错误提示很明显,告诉我传入的参数 img_url 必须是一个字符串。但问题是,我明明传入的是一个字符串啊!

后来经过一番排查,我发现问题出在 file 参数上。file 参数并不是一个字符串,而是一个对象。这个对象包含了图片的路径、名称、大小等信息。

为了解决这个问题,我将 file 参数改成了一个字符串,如下所示:

uniCloud.callFunction({
  name: 'imgSecCheck',
  data: {
    img_url: 'cloud://xxx.jpg'
  }
}).then(res => {
  console.log(res)
})

这样,问题就解决了。

总结

在使用 uniCloud 时,需要注意以下几点:

  • file 参数必须是一个字符串,而不是一个对象。
  • img_url 参数必须是一个字符串,而不是一个对象。
  • uniCloud.callFunction 方法的第二个参数 data 必须是一个对象。

希望这篇博客能帮助到你!