簡體   English   中英

無法從獲取請求 Node.js、Express 中獲取對象

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM