Api post, пустой объект body - PullRequest
       2

Api post, пустой объект body

0 голосов
/ 01 ноября 2018

Я пытаюсь настроить базовый API, используя node с 'body-parser', когда я публикую свои данные:

localhost:3000/users?email=test.com&givenName=test

Мой req.body.email пуст, как я могу опубликовать свои данные? Я использую body-parser так:

// create express app
const app = express();

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

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

Мой контроллер:

exports.create = (req, res) => {
    // Validate request
    if (!req.body.email) {
        return res.status(400).send({
            message: "user cannot be empty"
        });
    }

    // Create a user
    const user = new user({
        email: req.body.email || "No Emails",
        givenName: req.body.givenName || "No Emails",
        familyName: req.body.familyName || "No Emails"
    });

    // Save user in the database
    user
        .save()
        .then(data => {
            res.send(data);
        })
        .catch(err => {
            res.status(500).send({
                message:
                    err.message ||
                    "Some error occurred while creating the user."
            });
        });
};

Ответы [ 2 ]

0 голосов
/ 02 ноября 2018

Может быть, я ошибаюсь, но вы смешиваете body и query? Поэтому может быть две причины:

1.) Не смешивает body и query вверх, но отсутствует body:

Ваш запрос должен выглядеть следующим образом:

curl -X POST --header 'Content-Type: application/json' --header 'Accept: application/json' -d '{"email":"test.com","givenName":"test","familyName":"test"}' 'localhost:3000/users'

После этого вы можете получить доступ к значениям через req.body.email, req.body.givenName и req.body.familyName.

2.) Смешивание body и query up:

Доступ к вашим значениям через req.query.email, req.query.givenName и, соответственно, req.query.familyName.

0 голосов
/ 01 ноября 2018

Я пробовал код, похожий на ваш, и он работает нормально, убедитесь, что вы нажимаете POST-запрос от Почтальона. Смотрите код ниже,

'use strict';

// Initialize an Express application
const express = require('express');
const app = express();
const port = 8080;

// parse application/x-www-form-urlencoded
app.use(express.urlencoded({ extended: true }));

// parse application/json
app.use(express.json());

app.use((req, res) => {
    console.log(req.body);
    res.json(res.body);
});

// Start the express application
app.listen(port, () => {
    console.log(`server listening on port ${port}`);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...