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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 12:25:14