使用整数ID在json-server中触发‘未找到’错误的原因排查
为什么json-server用整数ID访问返回“未找到”,改成字符串ID就正常?
我通过npm安装了json-server,创建了students.json用于API测试。访问http://localhost:3000/students/2获取ID为2的学生详情时出现“未找到”错误,但把ID改成字符串类型后就能正常访问。参考的教程用整数ID却能正常运行,请问这是为什么?
我的students.json内容如下:
{ "students": [ { "id": 1, "name": "Soze", "location": "Portland", "phone": "9987568", "Courses": [ "Python", "Java" ] }, { "id": 2, "name": "Isabelle", "location": "Seattle", "phone": "2345678", "Courses": [ "JavaScript", "C++" ] } ] }
原因分析及解决办法
- 版本差异导致匹配规则变化:json-server在v0.17版本后默认启用严格模式,此时会对URL中的ID和JSON里的ID做严格相等比较(
===)。URL里的2是字符串类型,而你JSON里的id是整数类型,类型不匹配就会返回“未找到”。你参考的教程用的是旧版本,旧版本默认用松散相等(==),会自动转换类型,所以整数ID能正常匹配。 - 关闭严格模式即可解决:启动json-server时添加
--strict false参数,关闭严格模式后会自动做类型转换,整数ID就能正常匹配了:json-server --watch students.json --strict false - 保持主键类型一致:如果不想关闭严格模式,也可以把JSON里的
id改成字符串类型(比如"id": "2"),和URL中的参数类型统一,这样也能正常访问。
内容的提问来源于stack exchange,提问作者Kaiser
相关产品推荐
相关产品推荐

