我遇到了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
}
}
我做错了吗?
答案 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)
})

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