如何在不实例化 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;
我想编写一个脚本来创建一些用户并将它们 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;