我试图通过事件的 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 路线,而不是显示我得到的第一个事件数据,有什么原因吗[]
?
如果您的路线类似于
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);
});
你的问题在于比较字符串和数字类型。
比较之前
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"
}
]
}