[英]Cant get a object from a get request Node.js, Express
我正在關注 Traversy Media 的Node.js
教程,但遇到了一個我無法解決的問題。 我正在嘗試使用以下代碼從一組對象中獲取一個對象的響應:
app.get('/api/members/:id', (req, res) => {
res.json(members.filter(member => member.id === parseInt(req.params.id)));
});
但是當我嘗試獲取http://localhost:5000/api/members/1
時使用郵遞員(或在我的瀏覽器中輸入它)它給了我一個空數組。
這是我的主要 JavaScript 文件:
const express = require('express');
const path = require('path');
const app = express();
const logger = require('./middleware/logger')
const members = require('./Members')
//init middleware
//app.use(logger);
//Gets all members
app.get('/api/members', (req, res) => res.json(members));
//Get Single Members
app.get('/api/members/:id', (req, res) => {
res.json(members.filter(member => member.id === parseInt(req.params.id)));
});
//Set a static folder
app.use(express.static(path.join(__dirname, 'public')));
const PORT = process.env.PORT || 5000;
app.listen(PORT, () => console.log(`Server started on port ${PORT}`));
這是Members.js 文件
const members = [
{
name:"john",
email:"john@mail.com",
status: "active"
},
{
name:"sally",
email:"sally@mail.com",
status: "inactive"
},
{
name:"josh",
email:"josh@mail.com",
status: "active"
}
];
module.exports = members;
我完全被困住了,非常感謝任何幫助。
數組中的對象沒有“id”字段,這就是為什么沒有與過濾器匹配的原因。
你的意思是:'在這個數組中找到一個'id'字段為X的對象,其中X是req.params.id。 這不匹配任何內容,因為您的對象只有“名稱”、“電子郵件”和“狀態”字段,即沒有“id”字段,因此在調用過濾器方法時沒有匹配任何內容。
如果你做一個小測試,這應該會變得清楚。
替換這個
app.get('/api/members/:id', (req, res) => {
res.json(members.filter(member => member.id === parseInt(req.params.id)));
});
有了這個
app.get('/api/members/:email', (req, res) => {
res.json(members.filter(member => member.email === req.params.email));
});
當你發送請求時,發送 'josh@mail.com' 作為請求參數,你會發現返回了這條記錄:
http://localhost:5000/api/members/josh@mail.com
{
name:"josh",
email:"josh@mail.com",
status: "active"
}
發生這種情況是因為您的對象有一個電子郵件字段,並且您正在與之匹配,並且有一個對象的電子郵件字段的值為“josh@mail.com”。
所以重申一下,您當前的代碼不起作用,因為您試圖將您的對象與給定的“id”字段匹配,但它們不包含“id”字段。
如果您將數據結構更改為類似
{
id: 1, // Added 'id' field
name:"josh",
email:"josh@mail.com",
status: "active"
}
然后,您將有一些要匹配的內容,在該示例中,如果您將 '1' 作為 id 發送,那么您的代碼應該與該文檔匹配。
希望這是有道理的,有一定的用處。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.