使用 json-server 模拟搜索过滤器

Mit*_*tsa 1 json mocking json-server

我有routes.jsondb.json

路线

  "/api/*/_search?*=:searchstring": "/$1/?$2_like=:searchstring",
  "/api/*": "/$1"
Run Code Online (Sandbox Code Playgroud)

数据库文件

 {
  "cats": {
    "cats": []
  },
  "bats": [],
  "recordList": {
    "records": [
      {id:1, name: 'abc'},
      {id:2, name: 'def'},
      {id:3, name: 'ghi'}
    ]
  }
}
Run Code Online (Sandbox Code Playgroud)

使用上述配置获取记录列表绝对没问题。

需要了解如何模拟下面的搜索过滤器调用:

http:localhost:3001/api/_search?name=abc
Run Code Online (Sandbox Code Playgroud)

将路由更新为:

{
  "/api/*": "/$1",
  "/api/_search?name_like": "/$1"
}
Run Code Online (Sandbox Code Playgroud)

按照此链接:https : //github.com/typicode/json-server/issues/654#issuecomment-339098881

但是没有点击定义的配置 URL,我做错了什么?我在这里错过了什么吗?搜索词是动态的,因此传递的值应该只能从变量中接受,但在注释中它是静态的。如果有人遇到类似问题并已解决,请对此提供帮助

如果搜索 'abc',它应该返回

{
  records: [{id: 1, name: 'abc'}]
}
Run Code Online (Sandbox Code Playgroud)

And*_*eos 5

你需要像这样写你的搜索路线:

{
  "/api/records/_search?name=:searchstring": "/records/?name_like=:searchstring"
}
Run Code Online (Sandbox Code Playgroud)

甚至更好,你可以用参数化*$1进行替换,从而你将能够搜索查询的任何参数,并且在任何数据集,records或其他:

{
  "/api/*/_search?*=:searchstring": "/$1/?$2_like=:searchstring",
  "/api/*": "/$1"
}
Run Code Online (Sandbox Code Playgroud)

之后您的请求http://localhost:3001/api/records/_search?name=ab将与响应:

[
  {
    "id": 1,
    "name": "abc"
  }
]
Run Code Online (Sandbox Code Playgroud)

有关路由的其他文档