我有一个 loopback4 控制器来获取并在服务器上创建一些文件。所有文件都存储在具有更深目录的目录结构中。它可能看起来像这样:
├── WA2114
│ ├── 300dpi
│ │ ├── WA2114_Frontal.jpg
│ │ └── WA2114_entnehmen.jpg
│ ├── web
│ │ ├── WA2114-anwendung-Aufbewahrung.jpg
│ │ └── WA2114_Verpackung_NEU.jpg
│ ├── Produktdatenblatt
│ │ └── 2114-000.pdf
我想要一个方法,根据调用的 RestAPI-Route 获取所有文件:
GET /files/{category}
如果我打电话GET /files/WA2114
,我想得到一个位于 WA2114/ 下的所有文件的列表。如果我打电话GET /files/WA2114/300dpi
,我只想要更深的文件夹中的文件../300dpi。我希望很清楚,目标是什么。通过 . 上传新文件需要相同的逻辑POST /files/{category}
。
我已经尝试过这里描述的解决方案:https ://lideo.github.io/loopback.io/doc/en/lb4/Routes.html但没有成功。
我已经为顶层目录设置了路由。但是更深的目录无法动态访问,因为路由装饰器似乎被粘在了级别上,并且变量中不允许使用斜线。我不想创建几十种方法来处理每个目录级别。
我当前的控制器(简化):
export class FileController
{
constructor(@repository(FileRepository) public fileRepository: FileRepository)
{
}
@get('/files/{category}', {
responses: {
'200': {
description: 'Array of File model instances of the specified category',
content: {
'application/json': {
schema: {type: 'array', items: {'x-ts-type': File}}
}
}
}
}
})
async findbyCategory(@param.path.string('category') category: string): Promise<File[]>
{
return await this.fileRepository.findByCategory(category);
}
}
我如何装饰控制器方法才能使用相同的方法动态获取 /files/a 和 files/a/b/c?
我已经在 php/Symphony 中做了类似的事情,看起来像这样:
@Route("/files/{category}", methods={"GET"}, requirements={"category"=".+"})
. 这.+
就是这里的魔力。现在我必须用 loopback4 重建代码,并且必须重构路由,但我在这个上失败了。有人对此有解决方案吗?