根据打字稿中的请求参数设置猫鼬的查询过滤器

Posted

技术标签:

【中文标题】根据打字稿中的请求参数设置猫鼬的查询过滤器【英文标题】:Set query filter of mongoose based on request params in typescript 【发布时间】:2022-01-01 02:30:11 【问题描述】:

所以最终我需要在我的用例中进行猫鼬查找,但在此之前我需要创建一个动态查询来在获取时过滤数据。 我创建了一个 testInterface,它有两个字段,第一个是动作,第二个是值,动作具有我的 mongoose 模型中存在的字段的名称。

interface testInterface 
  action:
    | "testValue1"
    | "testValue2"
    | "testValue3"
    | "testValue4"
    | "testValue5";
  value: number;

我从 req 参数接收猫鼬模型字段值,我需要将此值用作操作值并进行搜索。

      var testquery: testInterface =  action: req.params.choice, value: 1 ;

但会抛出以下错误 -

类型 'string' 不能分配给类型 '"testValue1" | “测试值2” | “测试值3” | “测试值4” | “testValue5”'.ts(2322) userChoice.tsx(29, 3): 预期的类型来自属性 'action',它在类型 'testInterface' 上声明

请建议我如何实现以下用例。

【问题讨论】:

【参考方案1】:

我认为你需要手动将你的字符串值转换为对应的联合类型值:

interface testInterface 
  action:
    | "testValue1"
    | "testValue2"
    | "testValue3"
    | "testValue4"
    | "testValue5";
  value: number;


var testquery: testInterface =  action: convert(req.params.choice), value: 1 ;

function convert(strVal: string) : testInterface["action"] 
  switch (strVal) 
     case "testValue1":
       return "testValue1";
     case "testValue2":
       return "testValue2";
     case "testValue3":
       return "testValue3";
     case "testValue4":
       return "testValue4";
     case "testValue5":
       return "testValue5";
     default:
       throw new Error("Unsupported type");
  

【讨论】:

谢谢它的工作

以上是关于根据打字稿中的请求参数设置猫鼬的查询过滤器的主要内容,如果未能解决你的问题,请参考以下文章

在打字稿中使用猫鼬填充查询

用打字稿中的子文档描述猫鼬模型

如何在打字稿中的猫鼬userschema.methods中使用“this”

带有打字稿的猫鼬,来自猫鼬的错误“连接”

扩展打字稿中的快速请求类型

带有猫鼬的打字稿:无法读取未定义的属性“CasterConstructor”