【问题标题】:Loopback: How to access a model from a script?Loopback:如何从脚本访问模型?
【发布时间】:2023-03-30 20:50:01
【问题描述】:

我正在使用 Loopback,并希望通过脚本将数据持久保存到数据库中。

我已经编写了一个自定义命令,我将通过 cronjob 运行它:

'use strict';

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

app.start = function() {
  return app.listen(function() {
    const baseUrl = app.get('url').replace(/\/$/, '');
    console.log('Web server listening at: %s', baseUrl);
    let Dish = app.models.dish;
    console.log(Dish);
  })
}

boot(app, __dirname, function(err) {
  if (err) throw err;

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

我得到的输出是:

Web server listening at: http://localhost:3000
undefined

如何访问碟形模型?

【问题讨论】:

  • 请检查模型案例问题。您正在以小写形式分配模型。试试let Dish = app.models.Dish;
  • 我仔细检查了,Dish 在模型配置中是小写的。

标签: node.js loopbackjs


【解决方案1】:

你没有调用引导函数

https://github.com/strongloop/loopback-boot

loopback-boot 模块初始化(引导)一个 LoopBack 应用。具体来说:

配置数据源。

定义自定义模型配置模型并将模型附加到数据源。

配置应用程序设置

运行额外的启动脚本,因此您可以将自定义设置代码放在多个小文件中,而不是放在主应用程序文件中。

您的服务器 js 可能包含与此类似的内容

var boot = require('loopback-boot');

app.start = function() {
    return app.listen(function() {
        const baseUrl = app.get('url').replace(/\/$/, '');
        console.log('Web server listening at: %s', baseUrl);
        if (app.get('loopback-component-explorer')) {
            const explorerPath = app.get('loopback-component-explorer').mountPath;
            console.log('Browse your REST API at %s%s', baseUrl, explorerPath);
        }
    })
}

boot(app, __dirname, function(err) {
  if (err) throw err;

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

您需要这些来启动应用程序。您可能只需要调用 boot 就可以逃脱惩罚,但我认为 app.start 是连接数据源的方法。

【讨论】:

  • 不幸的是,这不起作用。查看我更新的脚本和输出。尽管模型确实存在,但它仍然未定义。
  • 你的目录结构是什么,你的模型是否包含在你的model-config.json中?
  • 是的,我使用默认目录结构。因此 model-config.json 位于 /server.
  • 我唯一能想到的另一件事是这个模型不在你的model-config.json中。
【解决方案2】:

您可以按如下方式在环回中访问您的模型:

首先需要你当前文件中的 server.js 文件。

const app = require('YOUR_SERVERJS_FILE_PATH');
const MY_MODEL = app.models.YOUR_MODEL_NAME

这里,YOUR_MODEL_NAME 将与 YOUR_MODEL.json 文件的名称值相同。

希望你能明白我的意思。 谢谢。

【讨论】:

  • 以上内容仅适用于 Loopback2。但在 Loopback3 中,您需要调用启动序列来将模型连接到应用程序。
【解决方案3】:

像这样构建你的命令脚本:

let app = require('./server/server') // Set the path according on the location of your command script

app.models.YOUR_MODEL // Access the model

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-07
    • 1970-01-01
    • 2016-01-16
    • 2013-06-19
    • 1970-01-01
    • 2018-03-30
    • 2021-02-11
    • 1970-01-01
    相关资源
    最近更新 更多