2016-09-21 133 views
0

我在使用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 
    } 
} 

我做錯了什麼?

回答

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

請注意,我還派會話標識查詢。

相關問題