我在没有strongloop框架的情况下使用loopback,这意味着我无法访问任何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());
我想要实现的是能够在运行时从环回应用程序中分离模型,因此它不再可用于其余API或环回对象(无需重新启动节点脚本)。 / p>
我知道可以删除之前从cli制作的模型定义: Destroy a model in loopback.io,但这在我的情况下无效,因为它的作用是删除在strongloop引导时加载的json对象,这在这里不适用。
我非常感谢有关此问题的任何帮助,我在strongloop API文档中找不到任何内容。
答案 0 :(得分:1)
免责声明:我是LoopBack的核心开发人员。
我担心在运行时删除模型没有简单的方法,我们正在issue #1590中跟踪此请求。
因此它不再可用于其余API或环回对象
我们先来看看REST API。为了从REST API中删除模型,您需要将其从强远程维护的“共享类”列表中删除,然后清理缓存的处理程序中间件。
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];
注意事项:
答案 1 :(得分:1)
<强>更新强>
现在有一个名为deleteModelByName的函数就是这样做的。
https://apidocs.strongloop.com/loopback/#app-deletemodelbyname
https://github.com/strongloop/loopback/pull/3858/commits/0cd380c590be7a89d155e5792365d04f23c55851