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

问题描述:

我在使用Parse-Server时遇到了一个奇怪的问题。101云代码中找不到对象 - 解析服务器

我得到有时以下错误:

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

它通常在云代码中的错误之后发生的,在使用即使是在它没有更新的对象(如下面的函数什么功能那只是做一个查找,但如果因为任何原因(例如错误的代码行)失败而仍然创建该错误)。但我不确定这是否是原因。

我有一个在云代码简单的函数:

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) 

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

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

我做错了什么?

由于您的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) 
 
})

请注意,我还派会话标识查询。