【问题标题】:How to access loopback models without instantiating the server/app如何在不实例化服务器/应用程序的情况下访问环回模型
【发布时间】:2016-02-17 16:39:17
【问题描述】:

我想编写一个脚本来创建一些用户并将它们链接到其他一些资源。

检查他们告诉您实例化应用程序/服务器以完成它的环回文档。 https://docs.strongloop.com/display/public/LB/Working+with+LoopBack+objects#WorkingwithLoopBackobjects-Fromacustomscript

但这种方法意味着让应用程序运行,这是我想避免的副作用。

关于如何只访问模型而不是整个应用程序的任何想法?

【问题讨论】:

  • 为什么不希望应用程序运行?它有什么副作用?
  • 应用程序连接到一堆服务,所以我们只希望一个实例运行并能够并行运行脚本。

标签: loopbackjs strongloop


【解决方案1】:

如果有人试图在 Electron 中执行此操作,您的模型将不会在 app.models 中定义,除非您覆盖 runtime.isServer

要覆盖它,请在需要环回之前添加它:

let path = require('path');
let runtime = require(path.join(__dirname, '../node_modules/loopback/lib/runtime'));
runtime.isBrowser = false;
runtime.isServer = true;

【讨论】:

    【解决方案2】:

    我们用于在不启动 Web 服务器的情况下运行脚本的是 github 上的环回示例中建议的“work-arround”。

    通过在你的 app.js 中添加这个...

    // start the server if `$ node server.js`
    if (require.main === module) {
      app.start();
    }
    

    ...只有在直接调用时才能启动应用程序,而不是在需要时启动。

    因此,在我们的脚本中使用var app = require('../app');,我们可以完全访问 app.models 而无需运行任何不必要的东西。

    【讨论】:

    • 我正在为我的用户模型执行此操作,但它使 app.models.user.find({where:{}}) 无法读取服务器内部的自定义脚本中未定义的属性查找文件夹
    • 我刚刚再次检查了我们的脚本,除了需要 app.js 之外我们没有做任何其他事情......
    • 是的,解决了这个问题。这是因为某种循环要求。
    • 这段代码似乎是 Loopback 3 中的默认代码。我发现我需要将逻辑上移一点,以围绕 boot() 调用
    【解决方案3】:

    如果您想通过 Loopback 创建一些种子数据,您可以创建一个 seedusers.js 文件,其中包含以下代码:

    var loopback = require('loopback');
    var boot = require('loopback-boot');
    var app = module.exports = loopback();
    
    boot(app, __dirname);
    

    然后运行node seedusers

    这将运行引导目录中的任何脚本,但不会启动网络服务器。

    【讨论】:

    • 所以这将实例化 app 用于创建新的 Users 并且由于它没有服务器启动代码,服务器将不会启动。我说的对吗?
    • @VishalKumar 没错。我假设这是 OP 想要的,但我想我们将不得不拭目以待!
    • 不错。我希望这是他想要的,因为我不知道我们是否可以在不使用app 的情况下创建新的Users
    • 是的,你说的是我想要完成的。我刚刚尝试过,我得到了 app.models.* 的“未定义”。我将发布我们最终使用的方法。 (很抱歉延迟回答;))
    • 我所做的和我在自己的脚本中发布的完全一样。 var mymodel = app.models.MyModel; 我可以开始调用内置的 Loopback 方法来添加数据。 app.models.* 的哪一部分未定义?
    猜你喜欢
    • 2019-11-08
    • 1970-01-01
    • 1970-01-01
    • 2011-02-24
    • 1970-01-01
    • 1970-01-01
    • 2012-08-08
    • 1970-01-01
    • 2020-05-16
    相关资源
    最近更新 更多