2015-07-20 32 views
3

我比較新手到Backbone.js的和基於node.js的骨幹前端和後端我工作的一個示例項目。我有兩個實體:UserBank在後端和backbone.js模型中對應這兩個模型的同名。 UserBank一對一的關係。當urlroot返回Backbone.js的模型處理空

銀行模式的urlroot是/bank,對應的用戶也是/user。現在的問題。用戶可能有也可能沒有與他關聯的銀行實體。因此,當擁有銀行賬戶的用戶登錄時,骨幹模型加載與登錄用戶相對應的銀行。

如果活動用戶沒有與他關聯的銀行,我將如何處理銀行的backbone.js模型?目前,如果用戶沒有與他關聯的銀行,則返回null。我覺得這不是正確的做法。任何有關這方面的幫助表示讚賞。

對應/bank航線的代碼是

app.get("/bank/:id?", function(req, res) { 
    if (!req.user) { 
    return JsonRenderer.error(null, res, 401, false); 
    } 
    return Bank.findById(req.user.id, function(err, bank) { 
    if (err) { 
     console.error(err); 
    } 
    if (bank) { 
     return res.json(JsonRenderer.user(bank)); 
    } 
    if (!bank) { 
     return JsonRenderer.error('No User', res, 200, false); 
    } 
    }); 
}); 
+0

只要您在前端處理得當,'null'看起來很好。 –

+0

如果我從後端發送null到Backbone.js模型,我在Backbone.js模型中指定的默認值被分配給模型的屬性。我希望這是處理null的正確方法。 – plbit

回答

1

我想如果你想要做什麼,然後它的好。但是我認爲這是一個有趣的關於語義的問題,以及語義是如何塑造邏輯的,所以我會拋出我的答案,看看是否有人有更好的思考方式。我也想學點東西。

從我在你的描述中看到的內容,我認爲這個問題有點不同。也就是說,您使用null以及它如何作爲響應來處理。

在我看來,沒有在數據庫中輸入銀行賬戶的人將是undefined。沒有定義。這將是一個喜歡的人,只是創建一個帳戶,但還沒有到那個部分呢。一個明確表示他們沒有銀行賬戶的人可能是null,這種對象表示「無」。有些人不希望在他們的數據庫列中混合這兩個。關於這個區別有很多喧囂,顯然這是一個非常JS的東西,它驅使非JS程序員瘋狂。 ;-)

因此,我認爲這裏有一些缺失的步驟,在你提出資源請求(銀行)之前要知道,你是否應該甚至打擾要求它。例如,如果UserBank是一對一的,則可以考慮通過id或null在User對象中添加對Bank的某些引用。這樣,當你得到用戶時,你可以看到是否需要延遲加載銀行信息,如果有一個關聯它。如果爲null(或未定義),則不需要。如果它有一個BankID,例如user.get('bankID');那麼您可以使用model.id = bankID然後.fetch()創建一個空的模型。因此,如果您需要銀行模式,您只能創建銀行模式。現在您的回調不必處理兩個問題 - 找出銀行是否存在,並找出有關用戶。這是一種RESTful,因爲純粹的形式URL是關於我們想要的資源。我們可能想知道我們是否需要這些資源,然後再請求它。聽起來你正在創建一個銀行模型,然後獲取它,但不知道是否有。所以你最終得到一個默認銀行。這可能並不壞。它可能只是一個銀行的空白表示。在這種情況下,也許另一種思考的方式是每個人都有一個銀行,只是一些銀行信息已經被填寫,而另一些則沒有。喜歡,我可能不會填寫我的個人資料,但我註冊時可能仍然有一個爲我創建的個人資料對象。:-)

還有另一種方法來思考這一點。也就是說,銀行應該有某種指向用戶的指針。使用Backbone的舊分支的Parse.com使用這種方法。基本上我可能有類似Bank.user指向User模型/對象。所以在客戶端,我的用戶被加載,然後我查詢一個包含指向我想要的用戶的指針的Bank對象。 Parse中的這個查詢如果找不到任何東西,就會返回undefined,但如果它與基於用戶的查詢相匹配,將返回銀行。

無論如何,我認爲這是一個有趣的問題。