【问题标题】:How do I properly use MongoDB for Strongloop scaffolded user model storage?如何正确使用 MongoDB 进行 Strongloop 脚手架用户模型存储?
【发布时间】:2014-08-31 22:45:35
【问题描述】:

我是 Strongloop 的新手,也是 MongoDB 的新手。现在有很多学习曲线。

我的基本问题是我将用户模型 (models.json) 数据源从内存连接器切换到 loopback-connector-mongodb 连接器,并且在调用 /login 时不再获得 userId。我取回了一个访问令牌,但用户 ID 为空。如果我切换回内存连接器,我会得到一个 1 或其他值的 userId。

如果我不提供 ID,我似乎记得在某处读过,Strongloop 会为我添加一个。这仅适用于内存数据存储吗?既然是 mongo,我需要做一些特别的事情吗?

我是否也需要将 accessToken 模型切换为 mongo(我刚想到这个)?

谢谢。

【问题讨论】:

  • 你用的是什么版本?我们最近修复了一个类似的问题。见github.com/strongloop/loopback/issues/353
  • 我的 SL 客户端是 v2.5.5(节点 v0.10.29)。
  • 我的魔术师也是 v1.6.3。
  • @RaymondFeng 问题 353 链接中提出的最终解决方案对我不起作用(这是向 accessToken 模型添加关系)。我会注意到,除了切换 dataSource 属性之外,我没有从脚手架的默认值中触及 models.json 文件。

标签: javascript mongodb loopbackjs strongloop


【解决方案1】:

您在这里遇到了一个极端情况:user 和 accessToken 由两种不同类型的 DB 支持。 MongoDB 使用 ObjectID 作为默认键,而 memory DB 使用 number。

accessToken 从基础 AccessToken 扩展而来。它继承了与基本 User 模型的 belongsTo 关系。 userId 类型设置为 number。要解决此问题,您可以确保 accessToken 模型连接到 mongodb 或在 models.json 中添加以下关系。

  "accessToken": {
    "dataSource": "db",
    "public": true,
    "options": {
      "base": "AccessToken",
      "relations": {
        "user": {
          "model": "user",
          "type": "belongsTo",
          "foreignKey": "userId"
        }
      }
    }
  },

【讨论】:

  • 当我从问题链接添加“关系”时,foreignKey 仍设置为“ID”。将其更改为“userId”使其对我有用。我不确定我是否理解这里的边缘情况。将用户模型切换到真实数据存储似乎是一个非常常见的用例(我也将 accessToken 切换到了 mongodb)。脚手架不应该添加这个belongsTo关系吗?似乎它可以与内存或 mongodb 一起使用。它会破坏 Oracle 连接器还是什么?但这是另一个问题 ;-) 感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-20
  • 1970-01-01
  • 2017-11-05
  • 2010-12-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多