Как выполнять POST-вызовы с использованием библиотек Node & ExpressJS - PullRequest
1 голос
/ 23 апреля 2020

Я работаю над Express с NodeJS для создания некоторых пользовательских API. Я успешно создал несколько API. Используя GET, я могу получить данные.

Вот мой индексный файл. js со всем кодом.

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

//Create user data.
const userData = [
    {
        id : 673630,
        firstName : 'Prasanta',
        lastName : 'Banerjee',
        age : 24,
        hobby : [
            {
                coding : ['java', 'python', 'javascript'],
                movies : ['action', 'comedy' , 'suspense'],
                sports : "basketball"
            }
        ],
        oper_sys : ['Mac', 'Windows']
    },
    {
        id : 673631,
        firstName : 'Neha',
        lastName : 'Bharti',
        age : 23
    },
    {
        id : 673651,
        firstName : 'Priyanka',
        lastName : 'Moharana',
        age : 24
    },
    {
        id : 673649,
        firstName : 'Shreyanshu',
        lastName : 'Jena',
        age : 25
    },
    {
        id : 673632,
        firstName : 'Priyanka',
        lastName : 'Sonalia',
        age : 23
    },
    {
        id : 673653,
        firstName : 'Bhupinder',
        lastName : 'Singh',
        age : 25
    },
];

//Create the API endpoints with callback functions.
//Display all Employees data.
app.get('/api/employees', function(req, res) {
    res.json(userData);
});

//Display employee data based on 'id' param.
app.get('/api/employees/:id', function(req, res) {
    const id = req.params.id;
    const user = userData.find(user => user.id == id)

    if(user){
        res.statusCode = 200
        res.json(user)
    }
    else {
        res.statusCode = 404
        return res.json({Error: ['ID Not Found']});
    }
});

//start the node server.
const PORT = 7777;
app.listen(PORT, function() {
    console.log('Your server is up & running at localhost:'+PORT+'. Please hit the APIs.');
});

Допустим, я хочу добавить id: 12345 firstName : Michael lastName: Эндрюс для моих пользовательских данных. Как я должен это с помощью POST звонков?

Я ищу код, с помощью которого я могу добавить новые данные в мои userData, чтобы каждый раз, когда я выполняю GET, я получал обновленный набор данных.

Ответы [ 6 ]

1 голос
/ 23 апреля 2020

Чтобы отправить данные POST по запросу, вы должны передать данные через тело запроса. Для этого вам нужно установить промежуточное программное обеспечение для анализа тела Node.js с именем body-parser . Прочтите это, чтобы получить представление о том, как настроить это в вашем приложении.

Затем вы должны добавить маршрут POST и методы к вашему приложению. js файл. Затем отправляйтесь в путь, анализируя данные через тело. Я отредактировал ваш код и разместил его ниже. Я прокомментировал места, где я добавил методы и промежуточное программное обеспечение.

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

// require body parser middleware
const bodyParser = require('body-parser')

// parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: false }))

// parse application/json
app.use(bodyParser.json())

//Create user data.
const userData = [
    {
        id: 673630,
        firstName: 'Prasanta',
        lastName: 'Banerjee',
        age: 24,
        hobby: [
            {
                coding: ['java', 'python', 'javascript'],
                movies: ['action', 'comedy', 'suspense'],
                sports: "basketball"
            }
        ],
        oper_sys: ['Mac', 'Windows']
    },
    {
        id: 673631,
        firstName: 'Neha',
        lastName: 'Bharti',
        age: 23
    },
    {
        id: 673651,
        firstName: 'Priyanka',
        lastName: 'Moharana',
        age: 24
    },
    {
        id: 673649,
        firstName: 'Shreyanshu',
        lastName: 'Jena',
        age: 25
    },
    {
        id: 673632,
        firstName: 'Priyanka',
        lastName: 'Sonalia',
        age: 23
    },
    {
        id: 673653,
        firstName: 'Bhupinder',
        lastName: 'Singh',
        age: 25
    },
];

//Create the API endpoints with callback functions.
//Display all Employees data.
app.get('/api/employees', function (req, res) {
    res.json(userData);
});

//Display employee data based on 'id' param.
app.get('/api/employees/:id', function (req, res) {
    const id = req.params.id;
    const user = userData.find(user => user.id == id)

    if (user) {
        res.statusCode = 200
        res.json(user)
    }
    else {
        res.statusCode = 404
        return res.json({ Error: ['ID Not Found'] });
    }
});

// POST emplyee data
app.post('/api/employees/', function (req, res) {

    // catch request body data, break it down and assign it to a variable
    // you can just parse req.body as well
    const newUser = {
        id: req.body.id,
        firstName: req.body.firstName,
        lastName: req.body.lastName
    }

    userData.push(newUser);
    res.status(200).json(newUser);
});

//start the node server.
const PORT = 7777;
app.listen(PORT, function () {
    console.log('Your server is up & running at localhost:' + PORT + '. Please hit the APIs.');
});
0 голосов
/ 23 апреля 2020

Отправка данных POST

Вам необходимо указать Accept и Content-Type заголовки и преобразовать объект JSON в POST request.

var userData = {
    id : 42069,
    firstName : 'Bob',
    lastName : 'Ross',
    age : 69
}


fetch('/api/employees', {
  method: 'POST',
  headers: {
    'Accept': 'application/json',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify(userData)
  })
  .then(res => res.json())
  .then(data => {
    console.log(data);
  })

Как получить POST на express

app.post('/api/employees', function (req, res) {
  console.log(req.body);
  //req.body will have your new user data. append that to exsisting userData array

  var newUser = {
    id: req.body.id,
    firstName: req.body.firstName,
    lastName: req.body.lastName,
    age: req.body.age
  }

  userData.push(newUser);
  res.json({status: 'New user added'})
})

Вам необходимо объявить массив userData глобально или лучше использовать базу данных.

0 голосов
/ 23 апреля 2020

Я думаю, вы получите sh эти данные из любого интерфейса пользовательского интерфейса или через Почтальон, и вы знаете, как их использовать. Приведенное ниже решение будет хранить данные в массиве, но для производства вы должны использовать базу данных в качестве решения для сохранения данных.

Поскольку вы не упомянули, какую версию Express вы используете, я рекомендую сначала установите пакет с именем body-parser.

Для получения дополнительной информации: https://www.npmjs.com/package/body-parser

const bodyParser = require("body-parser"); // require it
    app.use(bodyParser()); // you may also use Express' built-in app.use(express.json()); as an alterative

    app.post('/api/employees', (req, res) => { //ES6 Feature: Arrow Syntax
       const { id, firstName, lastName } = req.body; //ES6 Feature: Object Destructuring
       const newUserData = {
           id, // when playing with arrays, try userData.length + 1 to auto-generate an id. Omit this field then; while passing from UI/Postman
           firstName, // pass a string from the UI/Postman. "Michael" in your case
           lastName // pass a string from the UI/Postman. "Andrews" in your case
        }; // ES6 Feature: Equivalent to {id: id, firstName: firstName, lastName: lastName}
        userData.push(newUserData); // use unshift(); instead of push() if you want to add it at the start of an array
        res.status(201).send(newUserData); // 201 = response code for creation. Instead of send(), json() can also be used.
    });

Обратите внимание: Я включил комментарии в каждой строке моего кода, чтобы вы поняли его в полной мере и будут полезны для других.

0 голосов
/ 23 апреля 2020

Это мой полный фрагмент кода (индекс. js). Как вы можете видеть, я создал функцию пост-вызова, которая берет данные из константы 'data' и отправляет их на сервер. Но все равно это не работает.

const express = require('express');
const app = express();
const bodyParser = require('body-parser');

//Here we are configuring express to use body-parser as middle-ware.
app.use(bodyParser.urlencoded({ extended: false })); //support encoded bodies.
app.use(bodyParser.json());                          //support json encoded bodies.

//Create user data.
const userData = [
    {
        id : 673630,
        firstName : 'Prasanta',
        lastName : 'Banerjee',
        age : 24,
        hobby : [
            {
                coding : ['java', 'python', 'javascript'],
                movies : ['action', 'comedy' , 'suspense'],
                sports : "basketball"
            }
        ],
        oper_sys : ['Mac', 'Windows']
    },
    {
        id : 673631,
        firstName : 'Neha',
        lastName : 'Bharti',
        age : 23
    },
    {
        id : 673651,
        firstName : 'Priyanka',
        lastName : 'Moharana',
        age : 24
    },
    {
        id : 673649,
        firstName : 'Shreyanshu',
        lastName : 'Jena',
        age : 25
    },
    {
        id : 673632,
        firstName : 'Priyanka',
        lastName : 'Sonalia',
        age : 23
    },
    {
        id : 673653,
        firstName : 'Bhupinder',
        lastName : 'Singh',
        age : 25
    },
];

//Create the API endpoints with callback functions.
//Display a message.
app.get('/api/info', function(req, res) {
    res.send('Welcome to Employees API !!! Get access to free APIs.');
});

//Display all Employees data.
app.get('/api/employees', function(req, res) {
    res.json(userData);
});

//Display employee data based on 'id' param.
app.get('/api/employees/:id', function(req, res) {
    //Retrieve the 'id' param from endpoint.
    const id = req.params.id;
    //Search for that 'id' param in the 'userdata'.
    const user = userData.find(user => user.id == id)

    //If found, then display the data to the user.
    if(user){
        res.statusCode = 200
        res.json(user)
    }
    //Else, display error message.
    else {
        res.statusCode = 404
        return res.json({Error: ['ID Not Found']});
        //res.send("Oops !!! No User with ID:" + id + " was found.")
    }
});

const data = [ {
    id : 12345,
    firstName : 'new',
    lastName : 'data',
    age : 29
}]

// POST employee data
app.post('/api/employees/', function (req, res) {
    const newUser = {
        id: req.body.id,
        firstName: req.body.firstName,
        lastName: req.body.lastName
    }

    userData.push(newUser);
});

//start the node server.
const PORT = 7777;
app.listen(PORT, function() {
    console.log('Your server is up & running at localhost:'+PORT+'. Please hit the APIs.');
});
0 голосов
/ 23 апреля 2020
const express = require('express');
const app = express();

//including the body-parser
app.use(express.json()).use(express.urlencoded({ extended: false }));

//Create user data.    

//your get routes     

//post route
app.post('/api/employees',function(req,res) {
  //posted data is available in req.body
  //do any validations if required
  userData.push(req.body);
  res.send("success")
}

//start the node server.
const PORT = 7777;
app.listen(PORT, function() {
    console.log('Your server is up & running at localhost:'+PORT+'. Please hit 
the APIs.');
});

Вы можете проверить метод сообщения для express здесь

0 голосов
/ 23 апреля 2020

Это будет примерно так, если вы передадите json в почтовом запросе: ваше тело запроса будет выглядеть так:

{
  "id": "1",
  "firstName": "First Name",
  "lastName": "Last Name"
}
app.post('/api/employees', function(req, res) {
    if(req.body) {
      userData.push(req.body)
    }
    else {
      res.statusCode = 500
      return res.json({Error: ['Object Missing']});
    }
});
...