json-server中name_like与in_stock查询失效问题求助
json-server模糊查询与布尔查询失效问题
问题描述
用json-server搭建产品API,基础查询(如访问http://localhost:8000/products、按id查询)可正常工作,但name_like=react模糊查询与in_stock=true布尔查询返回空数组,无法得到预期结果。
数据结构
{ "products": [ { "id": 10001, "name": "Basics To Advanced In React", "overview": "SOMETHING", "long_description": "SOMETHING", "rating": 5, "in_stock": true }, { "id": 10002, "name": "Django Framework for Beginners", "overview": "SOMETHING", "long_description": "SOMETHING", "rating": 5, "in_stock": false } ] }
失效的查询示例
http://localhost:8000/products?name_like=react [无法工作] http://localhost:8000/products?in_stock=true [无法工作]
API调用代码
useEffect(() => { async function fetchProducts() { const response = await fetch( `http://localhost:8000/products?name_like=${searchTerm}` // 当searchTerm为react时 ); const data = await response.json(); setProducts(data); } fetchProducts(); }, [searchTerm]);
预期结果
调用http://localhost:8000/products?name_like=react时,应返回以下对象,实际返回空数组:
{ "id": 10001, "name": "Basics To Advanced In React", "overview": "SOMETHING", "long_description": "SOMETHING", "rating": 5, "in_stock": true }
解决方案
1. 模糊查询失效解决(大小写敏感问题)
json-server的_like查询默认大小写敏感,数据中name字段包含大写的React,但查询参数用了小写的react,导致匹配失败。有两种解决方式:
- 使用不区分大小写的模糊查询参数
_iLike,修改请求URL为:http://localhost:8000/products?name_iLike=react - 统一查询参数与数据的大小写,比如将前端的
searchTerm转为大写,或者将数据中的name字段转为小写后存储。
2. 布尔查询失效解决(参数解析问题)
URL中的查询参数本质是字符串类型,json-server对布尔值的匹配需要注意格式:
- 用数字
1代表true,0代表false,修改请求URL为:http://localhost:8000/products?in_stock=1 - 若使用json-server较新版本,也可以尝试显式使用相等匹配参数
_eq:http://localhost:8000/products?in_stock_eq=true
内容的提问来源于stack exchange,提问作者HazzazDurjoy
相关产品推荐
相关产品推荐

