Невозможно проанализировать запрос POST с установленным body-parser - PullRequest
0 голосов
/ 09 мая 2019

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

У меня есть 2 файла в корне моего проекта.- server.js для конфигурации API и - app.js для конфигурации приложения

// app.js
const express = require('express');
const bodyParser = require('body-parser');
const router = require('./routes/index.routes');

const app = express();

// Parse incoming requests data
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
app.use(router);

Мои маршруты находятся в маршрутах / index.routes.js

const express = require('express');
const QuickCreditCtrl = require('../controller/controller');

const router = express.Router();

const baseUrl = '/api/v1';

router.post(`${baseUrl}/auth/signup`, QuickCreditCtrl.createUser);
//router.post(`${baseUrl}/auth/signin`, QuickCreditCtrl.loginUser);

module.exports = router;

И контроллеры на контроллере /controller.js

const user = require('../data/users');

class QuickCreditsCtrl {
    createUser(req, res) {
        console.log(JSON.stringify(req.body));
        if (!req.body.name) {
            return res.status(404).send({
                status: '404',
                message: 'name is required',
            });
        } else if(!req.body.email) {
            return res.status(404).send({
                status: 404,
                message: 'email is required'
            });
        }
        const userNew = {
        id: user.length + 1,
        email: req.body.email,
        name: req.body.name,
        password: 'user123',
        };
        user.push(userNew);
        return res.status(200).send({
            status: 200,
            //message: 'New user added successfully',
            userNew,
            //data: userNew
        });
    }

}

const QuickCreditCtrl = new QuickCreditsCtrl();

//export default QuickCreditCtrl;
module.exports = QuickCreditCtrl;

Когда я использую Postman или curl, все в порядке, за исключением того, что я не могу получить доступ к req.body.Я не могу понять, почему, хотя я использую body-parser.

Что-то не так в моем коде?

Редактировать

Я пытаюсь упростить вещи, но явсе еще не может получить доступ к req.body.Я прочитал слишком много, но не могу найти решение своей проблемы.В приведенном ниже файле я пытаюсь сделать все в файле app.js, но тщетно:

const express = require('express');
const bodyParser = require('body-parser');
const db = require('./data/users')

const app = express();

// Parse incoming requests data
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));

app.post('/api/v1/auth/signup', (req, res) => {
  const data = {
        id: db.length + 1,
        email: req.body.email,
        firstN: req.body.firstN,
        lastN: req.body.lastN,
        password: 'Patie123',
      };
      db.push(data);
      return res.status(200).send({
        status: 200,
        message: 'User created successfully',
        data,
      });
      console.log(data);
});

module.exports = app;

Что на самом деле не так с моим кодом?Или как получить доступ к req.body?

Ответы [ 2 ]

0 голосов
/ 09 мая 2019

Попробуйте установить urlencoded в "false":

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

Дайте нам знать, если это исправит это!

РЕДАКТИРОВАТЬ:

Я попытался дать более глубокоепосмотрите, я заметил эту строку кода:

> router.post(`${baseUrl}/auth/signup`, QuickCreditCtrl.createUser);
> //router.post(`${baseUrl}/auth/signin`, QuickCreditCtrl.loginUser);

Здесь нет обратного вызова, вы должны передать req и res в качестве параметров:

 > router.post(`${baseUrl}/auth/signup`, QuickCreditCtrl.createUser, (req, res) => {
    //HERE YOU HAVE ACCESS TO req.body
}))

Source: https://expressjs.com/en/guide/routing.html

0 голосов
/ 09 мая 2019

Все кажется правильным. Наиболее вероятной причиной является то, что запрос не имеет тела JSON.

Это промежуточное ПО

app.use(bodyParser.json());

Работает, если находит заголовок «Content-Type»: «application / json».

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