Node.js экспресс-маршрутизация POST-запроса пустое тело с использованием body-parser

У меня проблема, когда мои почтовые запросы из формы отправки создают пустое тело независимо от того, какие настройки парсера тела я использую. Все мои зависимости package.json обновлены, и предыдущее приложение, которое я сделал (с устаревшим app.use (bodyParser);), делает это без проблем. Я проливал SO и различные сайты и пробовал каждый взлом, но, похоже, ничего не работает.

Вот соответствующие части моего app.js:

var express = require('express');
var app = express();
var http = require('http').Server(app);
var bodyParser = require('body-parser');
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));

var routes = require('./routes/routes.js');

app.post('/checklogin',routes.post_checklogin); 

Вот функция маршрута, вызываемая по почтовому запросу:

var checkLogin = function(req,res) {
    console.info(req.body)
}

Вот форма, из которой я пытаюсь получить свою форму, созданная по шаблону в pug:

form(action = "/checklogin" method = "post" enctype = "application/x-www-form-urlencoded")
    input(id = "login-email" class = "form-control" type = "text" placeholder = "email")
    input(id = "login-password" class = "form-control" type = "text" placeholder = "password")
    button(id = "login-submit" class='btn btn-primary') Login

Независимо от того, какая комбинация настроек парсера enctype или body позволяет мне использовать в качестве req.body что угодно, кроме '{}'. Если бы кто-нибудь мог указать на то, что я считаю действительно глупой ошибкой, я был бы бесконечно благодарен.

Кроме того, я понимаю, что это, вероятно, не лучший способ обработки входов в систему, но это просто для того, чтобы запросы POST работали в целом во всем приложении.

Можете ли вы включить свой файл routes.js. У вас в этом определен полноценный роутер? Если да, то почему вы вызываете app.post vs router.post. Также имя выражения вашей функции не соответствует тому, что вы вызываете.

user3137124 07.05.2018 02:00

Привет, я использую свой routes.js. У меня есть полный файл module.export. так что post_checklogin направляется к checkLogin. Я использую разницу в регистре, чтобы различать приложение и маршруты для себя

antonig 07.05.2018 02:08
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
2
332
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это не проблема body-parser, вам не хватает атрибута name в ваших элементах input.

Взято из Спецификация W3C:

A successful control is "valid" for submission. Every successful control has its control name paired with its current value as part of the submitted form data set. A successful control must be defined within a FORM element and must have a control name.

input(id = "login-email" name = "email" class = "form-control" type = "text" placeholder = "email")
input(id = "login-password" name = "password" class = "form-control" type = "text" placeholder = "password")

Большое спасибо! это было именно то. Для всех, кто сталкивается с этим, поле имени - это то, в чем свойство хранится в req.body - то есть, изменив имя на «email», теперь есть req.body.email.

antonig 07.05.2018 02:08

Другие вопросы по теме