如何在不实例化 server/app 的情况下访问环回模型

How to access loopback models without instantiating the server/app

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

检查环回文档,他们告诉您实例化 app/server 以完成它。 https://docs.strongloop.com/display/public/LB/Working+with+LoopBack+objects#WorkingwithLoopBackobjects-Fromacustomscript

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

有没有想过如何只访问模型而不访问整个应用程序?

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

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

boot(app, __dirname);

然后运行node seedusers

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

我们在 运行 脚本中使用的是 github.

环回示例中建议的 "work-arround" 脚本,而不启动 Web 服务器。

通过将此添加到您的 app.js...

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

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

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

如果有人试图在 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;