101 在云代码中找不到对象 - 解析服务器
Posted
技术标签:
【中文标题】101 在云代码中找不到对象 - 解析服务器【英文标题】:101 Object not found in Cloud Code - Parse Server 【发布时间】:2016-09-21 08:43:48 【问题描述】:我在使用 Parse-Server 时遇到了一个奇怪的问题。
我有时收到以下错误:
ParseError 代码:101,消息:'找不到对象。'
它通常发生在云代码错误之后,在使用该对象的任何函数中,即使其中没有更新(例如以下函数,它只是进行查找但如果由于任何原因失败仍然会创建错误,例如一个糟糕的代码行)。但是我不确定这是不是这个原因。
我在 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】:因为您的 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)
)
请注意,我还在查询中发送了会话令牌。
【讨论】:
以上是关于101 在云代码中找不到对象 - 解析服务器的主要内容,如果未能解决你的问题,请参考以下文章
无法从“firebase.js”解析模块“firebase”:在项目中找不到 Firebase