我想为我在Loopback 4中创建的模型实现搜索,过滤和分页功能。我为我创建的模型具有默认的7个CRUD API,尽管一切正常。
现在,我想添加列表功能(搜索,过滤器分页等),以了解如何在Loopback 4文档中实现没有适当的文档。有人可以帮我实现吗?
谢谢
答案 0 :(得分:2)
如另一个答案中所述,LoopBack 4的文档尚未完成。
对于搜索和过滤记录,LoopBack 4在TypeScript级别(请参阅loopback-datasource-juggler的文件query.d.ts中的类型定义)和REST API级别(通过控制器)使用与LoopBack 3相同的查询语法。 lb4 controller
命令所架)。
因此,大多数LoopBack 3文档也适用于LoopBack 4。要开始使用,请参见Filters的Querying data部分,查看Where filter之类的子页面以获取有关不同过滤字段的更多信息。
答案 1 :(得分:1)
是的,文档不完整,但似乎他们正在处理。
同时,您可以将find()
和repository
参数一起在where
上尝试or
。对于分页,offset
和limit
参数可以正常工作。有关其文档上可用的过滤器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,
}));
}