我是 backbone.js 的新手,我正在开发基于 node.js 的骨干前端和后端的示例项目。我有两个实体:后端的User
和Bank
以及与这两个具有相同名称的模型相对应的backbone.js模型。 User
和Bank
具有一对一关系。
银行模型的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 :(得分:1)
我想如果它能做你想做的事情那么它没关系。但我认为这是一个关于语义的有趣问题,以及语义如何塑造逻辑,所以我会回答我的问题,看看是否有人有更好的思考方式。我也想学点东西。
从我在你的描述中读到的内容,我对这个问题的看法略有不同。也就是说,您使用null以及如何将其作为响应处理。
在我看来,没有在数据库中输入银行帐户的人将是undefined
。没有定义任何东西。这将是一个喜欢的人,只是创建了一个帐户但还没有到达那个部分。明确表示他们没有银行帐户的人可能是null
,这个对象代表什么都没有"。有些人不希望在他们的数据库专栏中混合使用这两个。有很多关于差异的喧哗,显然这是一个非常JS的事情,驱使非JS程序员狂热。 ; - )
所以考虑到这一点,我认为这里有一些缺失的步骤,即在你提出资源请求(银行)之前要知道你是否应该费心去请求它。例如,如果User
和Bank
是一对一的,您可以考虑在User
对象中通过id或null或undefined添加对Bank的引用。这样,当您获得用户时,您可以看到是否需要延迟加载银行信息(如果有相关信息)。如果为null(或未定义),则不需要。如果它具有类似user.get('bankID');
的BankID,那么您可以使用model.id = bankID
然后.fetch()
创建一个空模型。因此,只有在需要时才创建银行模型。现在,您的success
error
回调并不需要处理两个问题 - 弄清楚银行是否存在,并弄清楚用户是什么。这是一种RESTful,因为纯形式的URL是我们想要的资源。在询问之前,我们可能想知道是否需要资源。听起来像你正在创建一个银行模型,然后获取它但不知道是否有一个。所以你最终得到了一个默认银行。哪个可能不错。它可能只是银行的空表示。在这种情况下,也许另一种思考方式是每个人都有一个银行,只是一些银行信息已经填写,而其他人没有。比如,我可能不会填写我的个人资料,但是当我注册时,我可能仍然为我创建了一个个人资料对象。 : - )
还有另一种思考方式。也就是说,也许Banks应该有一些指向用户的指针。使用Backbone的旧分支的Parse.com使用此方法。基本上我可能会有Bank.user
指向User
模型/对象的东西。所以在客户端,我的用户被加载,然后我查询一个包含指向我想要的用户的指针的Bank对象。 Parse中的此查询只返回undefined,如果它找不到任何内容,但如果它与基于用户的查询匹配则会返回该库。
无论如何,我认为这是一个有趣的问题。