【问题标题】:How to override base User in a Strongloop loopback scaffolded project?如何在 Strongloop 环回脚手架项目中覆盖基本用户?
【发布时间】:2014-09-30 21:55:44
【问题描述】:

假设一个全新的项目是通过以下方式创建的:

$ slc lb project myapp

如何将models.json 中的“user”模型替换为./models 目录中的“customer”模型?客户应具有登录/注销等方法,并且“用户”不应作为 API 存在。此外,客户模型不应该是动态的。假设客户应该有如下架构:

  • 姓名
  • 电子邮件
  • 密码
  • 问题
  • 回答
  • 电话
  • 已验证
  • 数据已创建

我已经玩了几天了,我的 google-fu 让我失望了。任何帮助表示赞赏。谢谢。

【问题讨论】:

    标签: javascript loopbackjs strongloop


    【解决方案1】:

    这是惯用的方式:

    1. models.json 中,将user 重命名为Customer

    2. models/customer.js中,将自定义方法添加到通过models.json创建的模型中:

      var app = require('../app');
      var Customer = app.models.Customer;
      
      Customer.myfn = function(cb) {
        // etc.
        cb();
      };
      

    此外,客户模型不应该是动态的。假设客户应该有如下架构

    使用strict 锁定属性:

    {
      "Customer": {
        "options": {
          "base": "User",
          "strict": true
        },
        "properties": {
          // define properties (schema)
        }
      }
    }
    

    更多详情请见Model definition reference

    根据此答案下方的评论进行更新

    可以先代码创建模型,请参阅在引入 models.json 之前构建的 LoopBack 示例应用中的 customer.js

    这是您应该在代码中执行的操作:

    var app = require('../app');
    
    var Customer = module.exports = loopback.createModel(
      'Customer',
      {
        name: 'string',
        // and all other more properties
      },
      {
        base: 'User',
        strict: true
      }
    );
    
    app.model(Customer);
    

    这与app.bootmodels.json 中的所有条目执行的代码基本相同。它应该将熟悉的 REST 路由添加到您的应用程序中:GET /customersPOST /customers/loginPOST /customers/logout 等。

    如果没有看到您的代码不起作用并且不知道您所说的“不起作用”到底是什么意思,那么很难为您提供帮助。

    【讨论】:

    • 感谢您的回答。这可行,但最终这不是我想要的。我实际上并没有反对使用models.json,但是作为一种学习工具,我想尝试将这个Customer 模型与models.json 完全分离。在我自己最初的尝试中,我将 customer.js 和 customer.json 文件放在 /models 文件夹中,这给我买了很好的 CRUD 休息端点,但是它们缺少 /login 酱(我为客户使用了 base: user 属性)。也许我只是问错了我的问题,或者答案是;不要那样做,上面的方法就是这样做的。
    • 抱歉,我没有收到有关此答案已更新的通知。是的,代码优先是我所追求的。我最终到达了那里,它基本上与您上面的内容完全匹配。从技术上讲,这已得到解答,但我的客户登录不起作用。当我发布到/customer/login 时,我的结果有 id、ttl 和 userId。由于 FK 应该是 customerId,我不能使用提供的 accessToken。我想我会标记完成并将其作为一个新问题提出。感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 2020-02-20
    • 1970-01-01
    • 2016-10-20
    • 2014-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-08
    相关资源
    最近更新 更多