У меня проблема, когда мои почтовые запросы из формы отправки создают пустое тело независимо от того, какие настройки парсера тела я использую. Все мои зависимости 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. У меня есть полный файл module.export. так что post_checklogin направляется к checkLogin. Я использую разницу в регистре, чтобы различать приложение и маршруты для себя



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


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