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)
})
请注意,我还派会话标识查询。