Backbone.js urlroot returns null 时的模型处理

Backbone.js model handling when urlroot returns null

我是 backbone.js 的新手,正在开发一个示例项目,前端和后端基于 backbonenode.js。我有两个实体:后端的 UserBank 以及与这两个具有相同名称的模型对应的 backbone.js 模型。 UserBank 具有 一对一 关系。

银行模型的 urlroot 是 /bank,对应的用户也是 /user。现在的问题。用户可能有也可能没有与他相关联的银行实体。因此,当拥有银行账户的用户登录时,backbone 模型加载与登录用户对应的银行。

如果活动用户没有与其关联的银行,我将如何处理银行的 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);
    }
  });
});

我想如果它能满足您的需求,那就没问题了。但我认为这是一个关于语义以及语义如何塑造逻辑的有趣问题,所以我会给出我的答案,看看是否有人对此有更好的思考方式。我也想学点东西

根据我在您的描述中所读到的内容,我对这个问题的看法有所不同。即,您对 null 的使用以及如何将其作为响应进行处理。

在我看来,没有在数据库中输入银行账户的人应该是 undefined。没有任何定义。这将是喜欢的人,刚刚创建了一个帐户但还没有达到那个部分。一个明确表示他们没有银行账户的人可能是 null,一个代表 "nothing" 的对象。有些人不想在他们的数据库列中混合使用这两者。关于差异有很多争论,显然这是一个非常 JS 的东西,让非 JS 程序员狂热。 ;-)

鉴于此,我认为这里缺少某种步骤,即在您请求资源(银行)之前知道您是否应该费心去请求它。例如,如果 UserBank 是一对一的,您可以考虑在 User 对象中通过 id 或 null 或 undefined 添加一些对 Bank 的引用。这样,当您获得 User 时,您可以查看是否需要延迟加载银行信息(如果有关联的话)。如果为 null(或未定义),则不需要。如果它有一个类似 user.get('bankID'); 的 BankID,那么您可以使用 model.id = bankID.fetch() 创建一个空模型。因此,您只需在需要时创建一个 Bank 模型。现在,您的 success error 回调不必处理两个问题 - 确定 Bank 是否存在,以及确定 User。这是一种 RESTful,因为纯形式的 URL 是关于我们想要的资源。在请求资源之前,我们可能想知道我们是否想要该资源。听起来你正在创建一个 Bank 模型,然后获取它但不知道是否有一个。所以你最终得到了一个默认银行。这可能还不错。它可能只是银行的空洞代表。在这种情况下,也许另一种思考方式是每个人都有银行,只是一些银行信息已经填写,而其他人没有。就像,我可能没有填写我的个人资料,但我可能仍然有一个在我注册时为我创建的个人资料对象。 :-)

还有另一种思考方式。也就是说,也许银行应该有某种指向用户的指针。使用 Backbone 旧分支的 Parse.com 使用此方法。基本上我可能有类似 Bank.user 指向 User model/object 的东西。所以在客户端,我的用户被加载,然后我查询一个包含指向我想要的用户的指针的 Bank 对象。如果找不到任何东西,Parse 中的此查询只是 return 未定义,但如果它与基于用户的查询匹配,则会 return 银行。

无论如何,我认为这是一个有趣的问题。