Arhn - архитектура программирования

Пустой req.body в NodeJs, Express

Я пытаюсь отправить json в свое приложение nodeJs через метод POST в теле. Для этого я использую POSTMAN для создания запроса с правильным заголовком типа const и строками тела JSON. Если сообщение обратно в консоли в порядке, req.body {} пуст. У вас есть идея, что не так в моем коде?

const bodyParser = require('body-parser');
const { Client } = require('pg');
const express = require('express');
const app = express();

// create application/json parser
const jsonParser = bodyParser.json()

// create application/x-www-form-urlencoded parser
const urlencodedParser = bodyParser.urlencoded({ extended: false })

const hostname = '127.0.0.1';
const port = 3000;

const dbSchema = 'public';

const client = new Client({
    user: 'postgres',
    host: 'localhost',
    database: 'postgres',
    password: '123123',
    port: 5432,
});

client.connect();

/* =========== Some Initialize staff =============== */

// parse various different custom JSON types as JSON
app.use(bodyParser.json({ type: 'application/*+json' }))

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

app.listen(port, hostname, () => {
    console.log(`Server running at http://${hostname}:${port}/`);
});

/* =========== FROM HERE =============== */

app.post('/post-test', urlencodedParser, (req, res) => {
    console.log('Got body:', req.body);
    res.sendStatus(200);
});


app.get('/',(req,res)=>{
    res.status(200).send('Get Ready for something awesome!\n');
});

введите здесь описание изображения введите здесь описание изображения < a href="https://i.stack.imgur.com/z33pt.png" rel="nofollow noreferrer">введите здесь описание изображения

14.08.2020

  • Я обычно использую - route.use(express.json());route.use(express.urlencoded({extended:true})); В вашем случае route это app. В новых версиях Express не обязательно использовать body-parser 14.08.2020
  • Когда я добавил следующие строки: app.use(express.json()); app.use(express.urlencoded({extended:true})); начал получать следующую ошибку: SyntaxError: Неожиданный токен в JSON в позиции 92 14.08.2020
  • Какая версия Express U R используется? 14.08.2020
  • экспресс: ^4.17.1, 14.08.2020
  • urlencodedParser для? что-то не так с вводом JSON, как показано на скриншоте почтальона? 14.08.2020
  • на самом деле, я удалил его, так как он не имеет никакого смысла в моем коде. 14.08.2020

Ответы:


1

Вы должны использовать app.use(bodyParser.json());, в вашем коде const jsonParser = bodyParser.json() это не используется.

Обновление: Или вы можете применить промежуточное ПО jsonParser непосредственно к маршруту публикации:

app.post("/post-test", jsonParser, (req, res) => {
  console.log("Got body:", req.body);
  res.json({ ...req.body });
});
14.08.2020
  • Я добавил: app.use(bodyParser.json()); но начал получать следующую ошибку при выполнении запроса: Неожиданный токен в JSON в позиции 92 14.08.2020
  • не могли бы вы предоставить свое тело в почтальоне вместо изображения? 14.08.2020
  • Я добавил jsonParser в app.post(...) и получил ту же ошибку: Неожиданный токен в JSON на позиции 92. 14.08.2020
  • {имя пользователя: newHere, полное имя: бездомный, адрес электронной почты: [email protected], пароль: пароль, идентификатор приглашения: 1,} 14.08.2020
  • уберите запятую , после "inviterId": 1 14.08.2020
  • Удалили запятую после inviterId: 1, что не решило проблему: «SyntaxError: Неожиданная строка в JSON на позиции 95». 14.08.2020
  • что произойдет, если вы просто отправите { "username": "newHere" } почтальону? 14.08.2020
  • Хм, сработало хорошо, вернуло req.body, но в любом случае с ошибкой в ​​консоли: Ошибка [ERR_HTTP_HEADERS_SENT]: невозможно установить заголовки после их отправки клиенту 14.08.2020
  • Итак, объект, отправленный почтальону, не был правильно отформатирован, почтальон уже жаловался в строке 4! для ERR_HTTP_HEADERS_SENT понятия не имею, я проверил код локально, и все в порядке .. 14.08.2020
  • ошибка была связана с тем, что я забыл удалить res и оба вызывались одновременно res.json({ ...req.body }); // res.sendStatus(200); 14.08.2020
  • Могу я спросить, если res.json({ ...req.body }); было решением, то как я могу применить его, когда хочу ввести параметры req.body в select ? 14.08.2020
  • ` res.json({ ...req.body });` был только для отладки, then how could I apply it when I want to introduce the req.body parameters to a select ? мне это непонятно? 14.08.2020

  • 2

    Не могу понять, что происходит, поэтому я публикую код, который работает для меня -

        let express = require('express'); 
        let app = express();
        const authorRoute = express.Router();
        authorRoute.use(express.json());
        authorRoute.use(express.urlencoded({extended:true}));
        authorRoute.post('/post-test', async (req, res) => {//req.body});
        app.use(authorRoute);
    

    Кроме того, обязательно протестируйте правильно сформированный JSON. версия экспресс: ^4.17.1,

    14.08.2020
    Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..