gpt4 book ai didi

node.js - 如何以编程方式从环回应用程序中分离模型?

转载 作者:搜寻专家 更新时间:2023-10-31 22:49:55 25 4
gpt4 key购买 nike

我在没有 strongloop 框架本身的情况下使用环回,这意味着我无法访问任何 cli 工具。我能够成功地创建和启动环回服务器并以这种方式定义/加载一些模型:

var loopback = require('loopback');
var app = loopback();

var dataSource = app.dataSource
(
'db',
{
adapter : 'memory'
});
);

var UserModel = app.loopback.findModel('User');
UserModel.attachTo(dataSource);
app.model(UserModel);

/* ... other models loading / definitions */

// Expose API
app.use('/api', app.loopback.rest());

我想要实现的是能够在运行时从环回应用程序中分离模型,因此它不再可从 rest API 或环回对象中使用(无需重新启动 Node 脚本)。

我知道可以从 cli 中删除之前创建的模型定义: Destroy a model in loopback.io ,但这在我的情况下无效,因为它所做的是删除在 strongloop 启动时加载的 json 对象,这在此处不适用。

对于这方面的任何帮助,我将不胜感激,我在 strongloop API 文档中没有找到任何内容。

最佳答案

免责声明:我是 LoopBack 的核心开发人员。

恐怕没有简单的方法可以在运行时删除模型,我们正在 issue #1590 中跟踪此请求.

so it is not available from the rest API nor the loopback object anymore

让我们先来看看 REST API。为了从 REST API 中删除您的模型,您需要将其从由 strong-remoting 维护的“共享类”列表中删除,然后清理缓存的处理程序中间件。

delete app.remotes()._classes[modelName];
delete app.remotes()._typeRegistry._types[modelName];
delete app._handlers.rest;

当下一个请求到来时,LoopBack 将创建一个新的 REST 处理程序中间件并重建路由表。

本质上,您需要撤消 this code 所做的工作.

为了从 LoopBack JavaScript API 中删除模型,您需要将其从应用程序注册表维护的模型列表中删除:

delete app.models[modelName];
delete app.models[classify(modelName)];
delete app.models[camelize(modelName)];
app.models.models.splice(app.models.indexOf(ModelCtor), 1);

(这正在撤消 this code 所做的工作)。

接下来,您需要将其从 loopback-datasource-juggler 注册表中删除:

delete app.registry.modelBuilder.models[modelName];

注意事项:

  • 我还没有运行/测试过这段代码,它可能无法开箱即用。
  • 它不处理删除的模型与其他模型有关系的情况。
  • 它不会通知 loopback-component-explorer API 的变化

关于node.js - 如何以编程方式从环回应用程序中分离模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33917682/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com