首页 > 解决方案 > 查询参数的语法不正确

问题描述

我正在尝试通过检查 url 参数及其值来按名称(或其他字段)过滤集合,例如

http://localhost:3000/patient?filter=name:jack

我有一种方法来检索 url pram 并将其转换为 json 对象:

const filter = handleQueryFilter(req.query.filter)

const handleQueryFilter = (query) => {
    try{
      // convert the string to look like json object
      // example id: -1, name: 1 to { id: "-1"}, {name: "1" }
      const toJSONString = ("{" + query  ).replace(/(\w*[^:].$)/g, (matched => {
       return '"' + matched.substring(0, matched.length ) + '"}'  ;
    }));
      
      return JSON.parse(toJSONString);
    }catch(err){
      return JSON.parse("{}"); // parse empty json if the clients input wrong query format
    }
  }

从“handleQueryFilter”返回的内容被传递给“find”方法以从数据库中获取结果

let patients = await Patient.find(filter);

但是 handleQueryFilter 总是返回一个空对象(上面的 catch 部分),我做错了什么?

标签: javascriptjsontypescriptmongodbexpress

解决方案


第一:通过使用自动制作 express pasre req.body

app.use(express.json())

将您的 URL 编辑为: http://localhost:3000/patient?name=jack


推荐阅读