为什么我在 GET 路由中收到空数组作为响应?

问题描述 投票:0回答:2

我试图通过事件的 id 获取事件,但由于某种原因,我在邮递员中得到一个空数组。

这是我的路线:

import { events } from '../../../db.json';

const handler = async (req , res) => {
    const evt = events.filter( (ev) => ev.id === req.query.id );
    if(req.method === 'GET'){
        return res.status(201).json(evt);
    }
    return res.status(400).json({ error: 'Event not found' });
}


export default handler;

这是我的 db.json:

{
  "events": [
    {
      "id": 1,
      "title": "Recital coldplay",
      "description": "Recital de coldplay en River"
    },
    {
      "title": "Recital metalica",
      "description": "Recital de metalica en velez",
      "id": 2
    },
    {
      "title": "asdasd",
      "description": "asdasdsa",
      "id": 3
    },
    {
      "title": "Dave Chappel Standup",
      "description": "Dave Chappel standup comedy",
      "id": 4
    },
    {
      "title": "test",
      "description": "teeesest",
      "id": 5
    }
  ]
}

路线是

api/events/[id]

如果在邮递员中我输入 GET 路线,并在

api/events/1
之后输入 GET 路线,而不是显示我得到的第一个事件数据,有什么原因吗
[]

javascript reactjs api next.js crud
2个回答
1
投票

如果您的路线类似于

req.params.id
,您可以使用 
api/events/:id

如果您想使用

req.query
,您可以添加如下查询参数:

api/events?id=1
// with req.param (api/events/1)
app.get("/api/events/:id", (req, res) => {
  const evt = events.filter((ev) => ev.id === req.params.id);
  res.json(evt);
});

// with req.query (api/events?id=1)
app.get("/api/events", (req, res) => {
  const evt = events.filter((ev) => ev.id === req.query.id);
  res.json(evt);
});

0
投票

你的问题在于比较字符串和数字类型。

比较之前

req.query.id
将其转换为数字类型或使用数字类型id字符串代替。

import { events } from '../../../db.json';

const handler = async (req , res) => {
    const evt = events.filter( (ev) => ev.id === Number(req.query.id) );
    if(req.method === 'GET'){
        return res.status(201).json(evt);
    }
    return res.status(400).json({ error: 'Event not found' });
}


export default handler;

{
  "events": [
    {
      "id": "1",
      "title": "Recital coldplay",
      "description": "Recital de coldplay en River"
    }
  ]
}
© www.soinside.com 2019 - 2024. All rights reserved.