REST API не добавляет правильные детали с POST - PullRequest
0 голосов
/ 31 марта 2019

Я пытаюсь создать свой собственный REST API, используя express / node.js. Я следовал учебному пособию на YouTube и подошел к тому моменту, когда тестирую данные POST для почтальона в массив, который я сохранил и который называется users.

Вот мой пост

app.post('/api/users', (req, res) => {
   const user = {
      userID: users.length + 1,
      name: req.body.name,
      username: req.body.username,
      email: req.body.email
  };
  users.push(user);
  res.send(user);
})

Вот мой массив

const users = [{ 
    userID: 1, 
    name: 'Thomas',
    username: 'Tomhass1999',
    email: 'tomhass@yahoo.com'
}, { 
    userID: 2,
    name: 'Bob',
    username: 'Bobina1998',
    email: 'bobiskewl@gmail.com'
}, { 
    userID: 3,
    name: 'Gerald',
    username: 'geraldorivero1965',
    email: 'witch3r3bestgame@gmail.com' 
}];

Вот функция для их отображения.

app.get('/api/users/:userID', (req, res) => {
const user = users.find(c => c.userID === parseInt(req.params.userID));
if(!user) // 404
{
    res.status(404).send("The user with the given ID was not found");
}
res.send(user);
})

Когда я использую почтальон, я нажимаю на post, введите http://localhost:3000/api/users, и он показывает мне массив и всю информацию, которую я ожидал. Однако при вводе этого сообщения в текстовое поле man man

{   
    name: 'Grindlebold',
    username: 'Btestest38',
    email: 'estestes2312ewl@gmail.com'
}

Вывод только

{
    "userID": 6
}

и после входа в http://localhost:3000/api/users в Firefox он показывает мне первые 3 точки в массиве, а затем просто:

0   
userID  1
name    "Thomas"
username    "Tomhass1999"
email   "tomhass@yahoo.com"
1   
userID  2
name    "Bob"
username    "Bobina1998"
email   "bobiskewl@gmail.com"
2   
userID  3
name    "Gerald"
username    "geraldorivero1965"
email   "witch3r3bestgame@gmail.com"
3   
userID  4
4   
userID  5
5   
userID  6

У меня вопрос, как бы получить его так, чтобы он сохранил его должным образом со всей необходимой мне информацией?

/*
---
KEY
---
req = request
res = response

GET = get data
POST = submit data


*/


const express = require('express');
const app = express();

app.use(express.json());


const users = [
    { 
        userID: 1, 
        name: 'Thomas',
        username: 'Tomhass1999',
        email: 'tomhass@yahoo.com'
    },
    { 
        userID: 2,
        name: 'Bob',
        username: 'Bobina1998',
        email: 'bobiskewl@gmail.com'
    },
    { 
        userID: 3,
        name: 'Gerald',
        username: 'geraldorivero1965',
        email: 'witch3r3bestgame@gmail.com' 
    },
];

app.get('/', (req, res) => {
    res.send('Hello World');
});

// returns the user list
app.get('/api/users', (req, res) => {
    res.send(users);
})

// adds a user to the user list
app.post('/api/users', (req, res) => {
    const user = {
        userID: users.length + 1,
        name: req.body.name,
        username: req.body.username,
        email: req.body.email
    };
    users.push(user);
    res.send(user);
})

app.get('/api/users/:userID', (req, res) => {
    const user = users.find(c => c.userID === parseInt(req.params.userID));
    if(!user) // 404
    {
        res.status(404).send("The user with the given ID was not found");
    }
    res.send(user);
})

// PORTS
const port = process.env.PORT || 3000;
app.listen(port, () => console.log(`Listening on port: ${port}...`))

1 Ответ

0 голосов
/ 31 марта 2019

Это означает, что ваш экспресс req.body не заполнен данными вашего запроса! Для этого ваше приложение должно использовать промежуточное ПО express.json или express.urlencoded:

var express = require('express');
var app = express();

app.use(express.json());
app.use(express.urlencoded({ extended: false });

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