101 在云代码中找不到对象 - 解析服务器

101 Object not found in Cloud Code - Parse Server

我在使用 Parse-Server 时遇到了一个奇怪的问题。

有时出现以下错误:

ParseError { code: 101, message: 'Object not found.' }

它通常发生在云代码中的错误之后,在使用该对象的任何函数中,即使其中没​​有更新(例如以下函数,它只是执行查找但如果它因任何错误而仍然创建错误原因就像一个错误的代码行)。但是我不确定这是不是原因。

我在 Cloud Code 中有这个简单的功能:

const user = req.user

const card_id = cid(req, user)
const base_error = global.i18n.__('errors.default')

if(!card_id) return res.error(base_error)

console.log('CID: ' + card_id + ' | UID: ' + user.id)

new Parse.Query(global.m.Card).get(card_id)
.then((card) => {
  if((new Date) - card.updatedAt > OSC.syncDelay)
    return _CARD.sync(card.get('onum'))

  return card
})
.then((card) => {
  res.success(card)
})
.then(null, (error) => {
  if(Array.isArray(error)) error = error[0]

  console.log(error) // HERE is where the error is logged
  res.error(base_error)
})

这是 console.log 打印的内容:

CID: PqOMwi5y60 | UID: QldBflokJV

以下是卡片 ACL 的定义方式(有更新,而不是在创建时):

const cardACL = card.getACL()
cardACL.setReadAccess(user, true)
cardACL.setWriteAccess(user, true)

if(memory.admin) {
  cardACL.setReadAccess(memory.admin, true)
  cardACL.setWriteAccess(memory.admin, true)
}

card.setACL(cardACL)

最后,这是我的数据库中的卡片对象 Permissions/ACLs:

"_id" : "PqOMwi5y60",
"_wperm" : [ 
    "role:Administrator", 
    "QldBflokJV"
],
"_rperm" : [ 
    "role:Administrator", 
    "QldBflokJV"
],
"_acl" : {
    "role:Administrator" : {
        "w" : true,
        "r" : true
    }
}

我是不是做错了什么?

因为您的 ACL 在您的查询中包含用户(因为只有用户或管理员可以读写 from/to 对象),您还需要发送已登录用户的会话令牌。所以最后你的代码应该如下所示:

const user = req.user

const card_id = cid(req, user)
const base_error = global.i18n.__('errors.default')

if(!card_id) return res.error(base_error)

console.log('CID: ' + card_id + ' | UID: ' + user.id)

new Parse.Query(global.m.Card).get(card_id,{
  sessionToken: request.user.get("sessionToken") 
})
.then((card) => {
  if((new Date) - card.updatedAt > OSC.syncDelay)
    return _CARD.sync(card.get('onum'))

  return card
})
.then((card) => {
  res.success(card)
})
.then(null, (error) => {
  if(Array.isArray(error)) error = error[0]

  console.log(error) // HERE is where the error is logged
  res.error(base_error)
})

请注意,我还在查询中发送了会话令牌。