Node.js表示路由POST请求空体,使用body-parser

时间:2018-05-06 23:00:20

标签: javascript node.js rest express post

我遇到的问题是,无论我使用哪种身体解析器设置,来自提交表单的帖子请求都会生成一个空体。我的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.log(req.body)
}

这是我试图从我的形式获取形式的形式,用哈巴狗模仿:

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请求在整个应用程序中正常工作。

1 个答案:

答案 0 :(得分:0)

这不是body-parser问题,您错过了name元素的input属性。

取自W3C specification

  

成功的控制是有效的"提交。每一次成功   control的控制名称与其当前值配对   提交的表单数据集。必须定义成功的控制   在FORM元素中,必须具有控件名称。

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")