uni-app 请求 uniCloud 报错:Identifier directly after number 如何解决?

2023年08月27日 , , 385

通过 uniCloud 前端组件查询数据时,有时会报这个错误,解决这个问题很简单。

报错描述

用 uni-app 开发项目,后端用的是 uniCloud 云开发,前端通过 <unicloud-db> 组件来查询数据,uniCloud 返回的数据里提示报错了,下面是报错信息:

{
  code: "SYSTEM_ERROR",
  message: "Identifier directly after number (1:7)
}

返回的结果里没有要获取的数据。

identifierdirectlyafternumber报错截图
identifierdirectlyafternumber 报错截图

报错原因分析

报错信息里 code 字段是 “SYSTEM_ERROR“,这是 uniCloud 端系统运行错误,无法返回查询数据的意思。根据报错信息,导致这个问题的原因是查询语句不合法导致。我的很多项目后端也是直接用 uniCloud 全家桶,这个问题我也遇到过,根据我的经验,出现这种问题时,你写的代码往往是这样的:

<template>
  <unicloud-db v-slot:default="{data, loading, error, options}" @error="handleError" collection="post-xxx" field="title,author,cover,content,create_time,uid" :where="'uid=='+userId">   
    {{error.message}}
    // 文章列表...
  </unicloud-db>
</template>

上面代码中,where 的写法输出的结果是:uid==id123,这个查询语句是不合法的,而合法的格式应该要包含引号的:uid=='id123'

解决办法

使用 javascript 常规的 + 来做字符串拼接,很容易出问题,我一般用模板字符串来写,最后将 where 的写法改成:

:where=`uid=='${userId}'`

这样的代码很直观,也很少漏掉这个引号。