Не могу получить объект из запроса на получение Node.js, Express - PullRequest
0 голосов
/ 04 марта 2020

Я следую учебнику 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}`));

И это члены. js file

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;

I ' Я полностью застрял, и любая помощь очень ценится.

1 Ответ

1 голос
/ 04 марта 2020

У объектов в вашем массиве нет поля 'id', поэтому ничто не соответствует фильтру.

То, что вы говорите: «Найдите объект в этом массиве, который имеет поле« id »X», где X - req.params.id. Это не соответствует никому, потому что ваши объекты имеют только поля 'name', 'email' и 'status', то есть нет поля 'id', поэтому при вызове метода filter ничего не сопоставляется.

Это должно стать понятным, если вы выполните небольшой тест ..

Замените это

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» в качестве идентификатора, тогда ваш код должен соответствовать этому документу.

Надежда, которая имеет смысл и имеет некоторое значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...