GET接口按ID查询事件返回空数组,请求排查原因
问题原因与解决方案
核心问题:类型不匹配导致过滤失败
你的db.json中事件的id是数字类型(比如1),但通过req.query.id获取到的参数是字符串类型(比如"1")。由于你使用了严格相等运算符===,它会同时比较值和类型,两者类型不匹配,所以filter找不到匹配项,返回空数组[]。
其他待优化问题
- 状态码错误:
201 Created是用于资源创建成功的响应状态码,GET请求查询成功应该使用200 OK。 - 逻辑顺序不合理:当前代码先执行过滤操作,再判断请求方法,建议先判断请求方法为GET时再执行查询逻辑,避免无效计算。
修正后的代码
import { events } from '../../../db.json'; const handler = async (req, res) => { if (req.method === 'GET') { // 将查询参数转为数字类型,再进行严格匹配 const evt = events.filter(ev => ev.id === Number(req.query.id)); // 如果找到结果返回200,否则返回404 return evt.length ? res.status(200).json(evt) : res.status(404).json({ error: 'Event not found' }); } return res.status(405).json({ error: 'Method not allowed' }); } export default handler;
额外说明
- 用
Number()将字符串类型的req.query.id转为数字,确保类型一致后再匹配。 - 增加了结果判断:如果查询到数据返回200,否则返回404(资源未找到),更符合RESTful规范。
- 非GET请求返回
405 Method Not Allowed,明确提示不支持的请求方法。
内容的提问来源于stack exchange,提问作者tukitooo1998
相关产品推荐
相关产品推荐

