云函数使用事务,无法写入_openid字段
发布于 5 年前 作者 dongguiying 4489 次浏览 来自 官方Issues

小程序提供的事务必须在云函数端使用,但是在事务中无法将_openid写入到集合中去,并且使用db.serverDate()也是会报错的。

复现云函数代码:

// 云函数入口文件
const cloud = require('wx-server-sdk')

cloud.init()

const db = cloud.database()

// 云函数入口函数
exports.main = async (event, context) => {
  const wxContext = cloud.getWXContext()

  await db.collection('test3').add({
    data: {
      _openid: wxContext.OPENID,
      createTime: db.serverDate(),
      name'db add'
    }
  })

  const transaction = await db.startTransaction()
  await transaction.collection('test3').add({
    data: {
      _openid: wxContext.OPENID,
      createTimenew Date(),
      // createTime: db.serverDate(), //报错 invalid key in $date object: offset
      name'transaction add'
    }
  })
  await transaction.commit()
  return {
    event,
    openid: wxContext.OPENID,
    appid: wxContext.APPID,
    unionid: wxContext.UNIONID,
  }
}

这个问题也已经有人遇到了:

https://developers.weixin.qq.com/community/develop/doc/0002e4a8f20e38f0a7f9df9c555c00

https://developers.weixin.qq.com/community/develop/doc/00024a5662c38072cbf97ef4e51800

https://developers.weixin.qq.com/community/develop/doc/000eacacd64ae02f8fc9dc67250000

根据上面的回帖,我也试了下自定义安全规则,并将该集合的权限全部给true,然而还是同样问题。

{
  "read": true,
  "write": true
 }

根据文档内容,事务必须在云函数端使用,如果不能写入_openid,使用其他字段来保存的话,后续的业务逻辑需要修改很多地方,希望尽快修复该问题,谢谢!

回到顶部