我正在使用express,但从bodyParser获取表单数据时遇到了问题。无论我做什么,它总是显示为空对象。下面是我的express生成的app.js代码(我唯一添加的是底部的app.post路径):
var express = require('express');
var app = module.exports = express.createServer();
// Configuration
app.configure(function(){
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
app.use(express.static(__dirname + '/public'));
});
app.configure('development', function(){
app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
});
app.configure('production', function(){
app.use(express.errorHandler());
});
// Routes
app.get('/', function(req, res){
res.sendfile('./public/index.html');
});
app.post('/', function(req, res){
console.log(req.body);
res.sendfile('./public/index.html');
});
app.listen(3010);
下面是我的HTML表单:
<!doctype html>
<html>
<body>
<form id="myform" action="/" method="post" enctype="application/x-www-form-urlencoded">
<input type="text" id="mytext" />
<input type="submit" id="mysubmit" />
</form>
</body>
</html>
提交表单时,req.body是一个空对象{}
值得注意的是,即使我从form标记中删除了enctype属性,也会发生这种情况
...我是否遗漏了什么/做错了什么?
我正在使用节点v0.4.11和Express v2.4.6
3条答案
按热度按时间monwx1rj1#
HTTP post的正文是所有具有
name
属性的表单控件的键/值哈希,值是控件的值。您需要给予所有输入命名。
pdtvr36n2#
这也是由于内容类型。请参阅console.log(req)对象。
通过console.log(req.is('json'))检查内容类型//返回true/false
我认为上面的“charset=UTF-8”可以忽略不计。
fhity93d3#
如果窗体如下所示
如果使用下面的代码行
那么req.body将为空,因为它只解析内容类型为
application/json
的req,但是源自元素的请求的默认值为application/x-www-form-urlencoded
。我的第一个StackOverflow贡献。耶!!