101 Cloud Code中找不到对象 - 解析服务器

时间:2016-09-21 08:43:49

标签: javascript node.js parse-platform 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)

最后,这是我的数据库中的卡对象权限/ ACL:

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

我做错了吗?

1 个答案:

答案 0 :(得分:0)

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



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)
})




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