如何在环回4中实现搜索和过滤操作?

时间:2019-09-10 05:31:06

标签: loopback4

我想为我在Loopback 4中创建的模型实现搜索,过滤和分页功能。我为我创建的模型具有默认的7个CRUD API,尽管一切正常。

现在,我想添加列表功能(搜索,过滤器分页等),以了解如何在Loopback 4文档中实现没有适当的文档。有人可以帮我实现吗?

谢谢

2 个答案:

答案 0 :(得分:2)

如另一个答案中所述,LoopBack 4的文档尚未完成。

对于搜索和过滤记录,LoopBack 4在TypeScript级别(请参阅loopback-datasource-juggler的文件query.d.ts中的类型定义)和REST API级别(通过控制器)使用与LoopBack 3相同的查询语法。 lb4 controller命令所架)。

因此,大多数LoopBack 3文档也适用于LoopBack 4。要开始使用,请参见FiltersQuerying data部分,查看Where filter之类的子页面以获取有关不同过滤字段的更多信息。

答案 1 :(得分:1)

是的,文档不完整,但似乎他们正在处理。

同时,您可以将find()repository参数一起在where上尝试or。对于分页,offsetlimit参数可以正常工作。有关其文档上可用的过滤器here的更多详细信息。 here中提供了有关CrudConnector.find()方法的详细信息。

为便于参考,我将附上我的代码,并按需要使用它。

/**
   * customer.repository.ts
   * mongodb datasource
   * @param [searchKey] Search in `firstName`, `lastName`, or `email`
   * @param [pageIndex] page number. If provided, `pageSize` is required
   * @param [pageSize] records per page. If provided, `pageIndex` is required
   * @returns {CustomerInfoInterface[]} List of customers sorted by `firstName`
   */
  async getCustomerList(searchKey?: string, pageIndex?: number, pageSize?: number): Promise<CustomerInfoInterface[]> {
    const searchParam = searchKey || '';
    const searchParams = [
      {firstName: {like: searchParam, options: 'i'}},
      {lastName: {like: searchParam, options: 'i'}},
      {email: {like: searchParam, options: 'i'}},
    ];
    var filterObject = {where: {or: searchParams}, order: ['firstName ASC']};
    if (pageIndex && pageSize) {
      const offset = (pageIndex - 1) * pageSize;
      const limit = pageSize;
      filterObject = Object.assign(filterObject, {limit, offset});
    }
    logger.debug('search user list with search query');
    logger.debug(filterObject);
    const customerList = await this.find(filterObject);
    return customerList.map(i => ({
      customerId: i.customerId,
      firstName: i.firstName,
      lastName: i.lastName,
      phone: i.phone,
      address: i.address,
      id: i.customerId,
    }));
  }