0

我正在使用 Loopback REST Client 进行 admin-on-rest 成功,没有任何问题。它易于使用并且非常适合标准的 CRUD 操作,但是我很快发现自己需要使用非常规的 REST 调用,如下所示:

http://www.remoteurl.com/api/getUsersWithRolesInfo

我还希望在某些情况下使用 Loopback 的 URL 内过滤器,例如:

http://www.remoteurl.com/api/Users?filter=[include][profile]&filter=[include][posts]

如何使用<Resource />组件实现这一点?

最初我想修改 REST 客户端以映射上述端点。但是,REST 客户端将其调用映射到 、 等类型GET_ONEGET_MANY而我想要映射的是 URL(如../getUserWithRolesInfo)。

谢谢你的帮助。

4

1 回答 1

0

您可以使用 List 组件传递永久过滤器,也可以使用 ReferenceInput 组件传递一次性过滤器。要对 API 调用进行更具体的修改,您可以使用 RestWrapper 来拦截对 API 的一些调用,并将其余部分传递给 Loopback Rest Client。

https://marmelab.com/admin-on-rest/RestClients.html#decorating-your-rest-client-example-of-file-upload

Loopback REST 客户端不考虑包含过滤器。您将不得不手动构建 URL 查询。像下面的东西。其中大部分来自 AOR-Loopback 代码,下面使用的 queryParameters 函数也是如此。您可以在那里找到它并根据您的需要进行修改。

function getListQueryConstructor(params, apiResource) {
  const page =  params.pagination.page
  const perPage = params.pagination.perPage
  const {field, order} = params.sort
  const query = {}
  if (params.filter.include) {
    query['include'] = params.filter.include
    delete params.filter.include
  }
  query['where'] = {...params.filter}
  if (field) {query['order'] = [field + ' ' + order]}
  if (perPage > 0) {
      query['limit'] = perPage;
      if (page >= 0) {
          query['skip'] = (page - 1) * perPage
      }
  }
  return (config.host + '/' + apiResource + '?' +  queryParameters({filter: JSON.stringify(query)}))
}
于 2017-07-07T09:09:20.050 回答