作为训练的一部分,我使用 Jade 与express 和node.js 来创建飞行日志数据库的前端。我已确认我的inputs have names ,我的正文解析器是 set to application/json ,并且我的路线出现 after my middleware declarations ,但我的 req.body 对象仍未定义。我的问题是为什么。 这是我的 Jade 形式中的一个字段:
.row.col-sm-16
div.input-group.form-control
form(action='',method='POST')
div(data-role='fieldcontain')
fieldset(data-role='controlgroup')
label(for='HobbsOut') HobbsOut      
input(id='HobbsOut',type='text',value='',placeholder='hobbs in generated',name='HobbsOut')
每个字段都会重复间隙下方的所有内容。提交按钮:
div.text-center
button.btn.btn-default.input-group-button Submit
按钮 div 与“数据角色”div 对齐。相关路线:
app.post('/logadd', ctrl.addFlight);
以及相关 Controller :
module.exports.addFlight = function (req, res) {
console.log(req.body.HobbsOut);
res.redirect('/loglist');
};
目前我只是尝试打印第一个字段并将用户重定向到飞行日志。我在多个应用程序中遇到此问题。我必须知道如何将用户输入推送到数据库中。非常感谢任何和所有的帮助。
最佳答案
编辑1:
您是否尝试过验证请求是否使用与 POST http 请求一起发送的 HobbsOut
值发送到正确的 URL(我们的 '/logadd'
)案例)使用Fiddler?
你能提供生成的表单html而不是jade模板吗?因为 Jade 模板引擎本身与您面临的问题无关。您的问题可能是以下三个问题之一:
- 生成的 html 不正确。
- 表单发布数据的网址不正确
- 服务器端无法解析 HTTP POST 请求中发送的数据。
旧帖子:
您需要使用 bodyParser.urlencoded 添加对解析表单内给出的数据的支持。 :
var express = require('express')
var bodyParser = require('body-parser')
var app = express()
// parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: false }))
最后一行添加表单正文解析,内容类型为 application/x-www-form-urlencoded。
body-parser中间件将表单主体解析为服务器端变量req.body
。
关于node.js - Jade 表单返回空主体以表达 Node.js POST 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28096758/