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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 12:50:01