试试试试
试试试试
  • 发布:2025-05-19 10:39
  • 更新:2025-05-20 16:32
  • 阅读:96

【报Bug】云端Node版本16.51.1,但是不支持js的??运算符

分类:uniCloud

产品分类: uniCloud/App

操作步骤:

见说明

预期结果:

见说明

实际结果:

见说明

bug描述:

本地node版本是18.20.0,云端node版本是16.15.1
调试时都没问题,发布到线上就报错

SyntaxError: Unexpected token ?

排查后才发现是

let a = b ?? '默认值'

这类语法中的 ?? 在云端环境不支持

但是查了下相关资料,node14版本就支持了,云端node都16了
那为什么unicloud的云端node版本不支持呢?

2025-05-19 10:39 负责人:无 分享
已邀请:
DCloud_uniCloud_CRL

DCloud_uniCloud_CRL

哪个云厂商??? 运算符是支持的。贴下错误堆栈看下具体位置是这里吗?

  • 试试试试 (作者)

    阿里云,就是这里报错,后来把 ?? 改成 || 就可以了

    2025-05-19 20:56

  • DCloud_uniCloud_CRL

    回复 试试试试: 阿里云node环境没有问题,你可以单独写一个函数试下。

    2025-05-20 11:14

  • 试试试试 (作者)

    回复 DCloud_uniCloud_CRL: 复现了一下,是数据库触发器的问题,详细说明我写在下面单独的回复中了。 报错的示例代码,在连接本地云函数没问题,连接云端云函数就会报错

    2025-05-20 16:22

试试试试

试试试试 (作者)

经过测试:是云端数据库触发器报错

测试步骤: 在数据库触发器的beforeRead中,执行下图中带 ?? 的语法

然后就会报错

errCode: "SYSTEM_ERROR"  
errMsg: "Unexpected token ?"

clientDB日志也有记录(涂抹部分是项目文件名)

然后只要把 ?? 改成 || 就能正确执行了

   let a  
   let b = a || '默认值'  
   return b

  • DCloud_uniCloud_CRL

    clientdb 云函数node版本太低导致的,这个问题我们修复一下

    2025-05-21 11:29

  • 试试试试 (作者)

    回复 DCloud_uniCloud_CRL: https://ask.dcloud.net.cn/question/172206 这个问题现在修复了吗? 数据库使用中文字段,目前兼容性都很好,除了这一个单表查询排序不支持

    2025-05-21 11:44

  • DCloud_uniCloud_CRL

    回复 试试试试: 建议使用英文

    2025-05-21 14:40

  • 试试试试 (作者)

    回复 DCloud_uniCloud_CRL: 因为目前中文大多数场景兼容都没问题,就这一个bug,单表不能排序,联表就能排序。 要是完全不兼容,甲方如果要求数据库中文字段,直接就拒了都不用废话;但现在就这么一个bug,这个项目是接还是不接...

    2025-05-22 19:50

要回复问题请先登录注册