云端Node版本16.51.1但是在uni-app中不支持js的??运算符

云端Node版本16.51.1但是在uni-app中不支持js的??运算符

操作步骤:

见说明

预期结果:

见说明

实际结果:

见说明

bug描述:

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

```javascript
SyntaxError: Unexpected token ?
排查后才发现是  
let a = b ?? '默认值'
这类语法中的 ?? 在云端环境不支持  

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

![](https://www.itying.com/uniimg.php?url=https://img-cdn-tc.dcloud.net.cn/uploads/questions/20250519/c4954fed971c97fb2ccc17850701fb0b.png)

更多关于云端Node版本16.51.1但是在uni-app中不支持js的??运算符的实战教程也可以访问 https://www.itying.com/category-93-b0.html

12 回复

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

更多关于云端Node版本16.51.1但是在uni-app中不支持js的??运算符的实战教程也可以访问 https://www.itying.com/category-93-b0.html


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

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

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

经过测试:是云端数据库触发器报错
测试步骤: 在数据库触发器的beforeRead中,执行下图中带 ?? 的语法

然后就会报错 errCode: “SYSTEM_ERROR”
errMsg: “Unexpected token ?” clientDB日志也有记录(涂抹部分是项目文件名)

然后只要把 ?? 改成 || 就能正确执行了 let a
let b = a || ‘默认值’
return b

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

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

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

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

回复 试试试试: 可以试下原生的查询语句

回复 DCloud_uniCloud_CRL: 能修复就尽量修复一下吧,毕竟现在国产化都是趋势,虽然英文还是主流,但中文需求也会越来越多的。换句话说,接项目打广告的时候,加一个支持中文,都能在国内内卷的外包圈打出一个新的卖点

这是UniCloud云函数运行环境与Node.js版本兼容性问题。UniCloud云函数虽然基于Node.js 16.15.1,但实际运行时使用的是更严格的JavaScript引擎配置。

解决方案:

  1. 改用兼容性更好的语法:
let a = typeof b !== 'undefined' ? b : '默认值'
  1. 或配置babel转译: 在云函数目录下添加babel.config.js:
module.exports = {
  presets: [
    ['[@babel](/user/babel)/preset-env', {
      targets: {
        node: '12'
      }
    }]
  ]
}
  1. 安装必要依赖:
npm install --save-dev [@babel](/user/babel)/core [@babel](/user/babel)/preset-env
回到顶部