Javascript 无法从get-request节点获取对象。js,Express

Javascript 无法从get-request节点获取对象。js,Express,javascript,node.js,json,express,Javascript,Node.js,Json,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它给了我一

我正在学习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'作为请求参数,您应该发现此记录返回:

发生这种情况的原因是,您的对象有一个电子邮件字段,您正在与该字段进行匹配,并且有一个对象的电子邮件字段的值为'josh@mail.com"

所以重申一下,您当前的代码不起作用,因为您试图将对象与给定的“id”字段相匹配,但它们不包含“id”字段

如果您将数据结构更改为

    {
      id: 1, // Added 'id' field
      name:"josh",
      email:"josh@mail.com",
      status: "active"
    }
那么您就有了一些可以匹配的东西,在那个示例中,如果您发送'1'作为id,那么您的代码应该与该文档匹配


希望这是有意义的,并且有一些用处。

您希望
member.id
是什么?您的对象上没有
id
属性!
id
属性不会神奇地出现。这并不特别。您必须向
members
数组中的每个对象显式添加
id
属性。您可以使用以下代码段自动对它们进行编号,以
1
开头:
members.forEach((m,i)=>m.id=i+1)    {
      id: 1, // Added 'id' field
      name:"josh",
      email:"josh@mail.com",
      status: "active"
    }