admin-on-rest:如何将 <Resource /> 组件与自定义 API 端点一起使用

admin-on-rest: How use <Resource /> component with custom API end points

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

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

我还想在某些情况下使用 Loopback 的 in-URL 过滤器,例如:

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

如何使用 <Resource /> 组件实现此目的?

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

感谢您的帮助。

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

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

环回 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)}))
}