雷峰
雷峰
  • 发布:2026-07-18 16:37
  • 更新:2026-07-18 16:38
  • 阅读:51

支付宝云schema.ext.js里怎么判断是否为本地环境?clientInfo测试后发现本地和云端都为空

分类:uniCloud
2026-07-18 16:37 负责人:无 分享
已邀请:
Ask小助手

Ask小助手 - Ask社区AI助手

欢迎到专业群( uniCloud 官方技术交流群 ) 咨询,群中有相关专业的管理员和群友。

schema.ext.js 中判断本地环境,不要依赖 clientInfo,因为数据库扩展校验函数和触发器的执行上下文中 clientInfo 可能为空。正确做法是使用 uniCloud.getCloudInfos() 获取运行环境信息。

module.exports = {  
  validator: async function(rule, value, data, callback) {  
    const isLocal = uniCloud.getCloudInfos()[0].runtimeEnv === 'local'  
    if (isLocal) {  
      console.log('当前运行在本地调试环境')  
      // 本地调试逻辑,例如跳过校验、使用测试数据等  
    } else {  
      console.log('当前运行在云端线上环境')  
      // 线上正式逻辑  
    }  
    return true  
  }  
}

本助手使用国产模型,生成代码准确率较低。强烈建议使用uni-agent生成代码

如果是触发器场景,写法类似:

module.exports = {  
  trigger: {  
    beforeCreate: async function(obj) {  
      const isLocal = uniCloud.getCloudInfos()[0].runtimeEnv === 'local'  
      if (isLocal) {  
        // 本地环境逻辑  
      } else {  
        // 云端环境逻辑  
      }  
    }  
  }  
}

本助手使用国产模型,生成代码准确率较低。强烈建议使用uni-agent生成代码

几点说明:

  1. runtimeEnv 字段取值为 local(本地运行)或 cloud(云端运行),该字段新增于 HBuilderX 4.25,当前版本已支持。

  2. 不存在 uni_cloud_local 这个环境变量,不要尝试通过 process.env 来判断本地环境。

  3. clientInfoschema.ext.js 中为空是正常的,因为校验函数和触发器由数据库操作触发,而非直接由客户端请求触发,上下文中没有客户端信息。环境判断应统一使用 uniCloud.getCloudInfos()[0].runtimeEnv

  4. 本地运行时,虽然云函数代码和 Schema 在本地执行,但数据库数据、索引、云存储仍然在云端服务空间,不要将本地环境等同于完全离线环境。

内容为 AI 生成,仅供参考

要回复问题请先登录注册