You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 02:36:03