Typescript 环境下 Loopback 控制器基于 lang 参数扁平化嵌套对象需求问询
实现方案
1. 修正模型类型定义(可选但推荐)
你当前定义的gradeData类型为字符串,但实际存储的是多语言对象,先调整类型避免后续TS报错:
export class SampleModel { id: number; code: number; guide?: string; // 兼容存储时的对象结构和返回前端时的字符串结构 gradeData?: string | Record<string, string>; }
2. 修改控制器逻辑
拿到仓库返回的原始数据后,遍历处理每个对象的gradeData字段即可,代码如下:
// returns an array of SampleModel objects @get('/guides') async find( @param.query.string('lang') lang: string, @param.filter(SampleModel) filter?: Filter<SampleModel> ): Promise<SampleModel[]> { // 先获取原始数据 const rawData = await this.sampleModelRepository.find(filter); // 遍历转换每个项的gradeData字段 return rawData.map(item => { const result = {...item}; if (result.gradeData && typeof result.gradeData === 'object') { // 取对应语言的值,找不到对应语言时默认返回空字符串,可按需修改默认值 result.gradeData = result.gradeData[lang] ?? ''; } return result; }); }
3. 可选边界处理
- 如果请求未传
lang参数,可以加默认逻辑,比如默认取en对应的内容,或者不转换直接返回完整多语言对象 - 如果需要所有返回
SampleModel的接口都自动做这个转换,可以把逻辑抽成LoopBack拦截器,不用重复写控制器代码
内容的提问来源于stack exchange,提问作者Niv
相关产品推荐
相关产品推荐

