为超过 2 个级别启用 nestRemoting(对于嵌套查询)

Enable nestRemoting for more than 2 levels (for nested queries)

我的问题基本上是,如何为超过 3 个相关模型启用 nestRemoting (nested queries for related models)?

目前我正在使用 4 个相关模型,并且希望能够一直向上或向下进行嵌套查询,而现在我只能对 3 个模型(即 2 级向上和 2 级)进行嵌套查询水平下降)。

什么有效:

因此,例如,我有我的帐户模型,它是一切的根源,即所有其他模型最终都会导致一个帐户)然后我假设项目、文件夹然后是照片作为叶子。

我已经配置了我的关系并且它工作得很好,例如

反之亦然:

最后在我的代码中添加:

// Configure one way of the relation
Account.nestRemoting('projects');
Project.nestRemoting('folders');
Folder.nestRemoting('photos')

// Configure the other way of the relation
Photo.nestRemoting('folder')
Folder.nestRemoting('project')
Project.nestRemoting('account');

这很好用,让我可以做类似的事情

/api/Accounts/<account id>/projects/<project id>/folders

获取属于该帐户的文件夹列表。

反之亦然,我可以反过来做:

/api/Photos/folder/project/

然而:

当我尝试向任一方向的查询添加一个嵌套级别时,我收到错误消息。

即如果我尝试做

/api/Accounts/<account id>/projects/<project id>/folders/<folder id>/photos

或者如果我这样做

/api/Photos/folder/project/account

我收到以下错误:

"name": "Error",
"status": 404,
"message": "Shared class \"Account\" has no method handling GET /<uuid>/projects/<uuid>/folders/<uuid>/photos?access_token=XXXXXXXXXXXXXXX",
"statusCode": 404,
"stack": "Error: Shared class \"Account\" has no method handling GET /<uuid>/projects/<uuid>/folders/<uuid>/photos?access_token=XXXXXXXXXXXXXXX\n    at restRemoteMethodNotFound (/myserver/node_modules/loopback/node_modules/strong-remoting/lib/rest-adapter.js:322:17)\n    at Layer.handle [as handle_request] (/myserver/node_modules/loopback/node_modules/express/lib/router/layer.js:95:5)\n 

(为了可读性,我替换了实际的 id)

但只有当我尝试查询超过模型以上 2 个级别(或以下 2 个级别)时才会触发此错误。

例如,如果我从下一级开始(例如在项目而不是帐户):

/api/Projects/<project id>/folders/<folder id>/photos

这很好用。

或者反过来:

/api/Folders/project/account

这告诉我方法和一切都按预期工作,但嵌套级别有限制。

那么回到我最初的问题,我怎样才能向嵌套查询添加更多级别?有什么我可以在不修改环回源代码的情况下配置的吗?

顺便说一下,我的数据源是一个 MongoDB 实例(即 mongodb 连接器)

谢谢!

@Ivan Schwarz 是对的。事实证明,这不是错误,而是不受支持的功能。

The details are here.

翻了一下代码,发现问题的根源是多于2层的模型之间没有定义关系,所以现在无法遍历依赖树。

所需的更改涉及以某种方式遍历相关模型之间的关系以及后者之间的关系,等等,但目前尚未对遍历进行编码。

解决方法基本上是手动定义您自己的远程方法并调用它。