Node.js/Express表单后请求主体不工作

r7xajy2e  于 2022-11-29  发布在  Node.js
关注(0)|答案(3)|浏览(158)

我正在使用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

monwx1rj

monwx1rj1#

<form id="myform" action="/" method="post" enctype="application/x-www-form-urlencoded">
  <input type="text" name="I_appear_in_req_body" id="mytext" />
  <input type="submit" id="mysubmit" />
</form>

HTTP post的正文是所有具有name属性的表单控件的键/值哈希,值是控件的值。
您需要给予所有输入命名。

pdtvr36n

pdtvr36n2#

这也是由于内容类型。请参阅console.log(req)对象。

'content-type': 'application/json; charset=UTF-8’  // valid.

'content-type': 'application/JSON; charset=UTF-8’  // invalid & req.body would empty object {}.

通过console.log(req.is('json'))检查内容类型//返回true/false
我认为上面的“charset=UTF-8”可以忽略不计。

fhity93d

fhity93d3#

如果窗体如下所示

<form action="/", method="post">
    <label for="for_name">Name: </label>
    <input id="for_name" type="text" name="user_name"/>
    <button type="submit">Submit</button>
</form>

如果使用下面的代码行

app.use(express.json());

那么req.body将为空,因为它只解析内容类型为application/json的req,但是源自元素的请求的默认值为application/x-www-form-urlencoded

app.use(express.urlencoded({ extended: true }));

我的第一个StackOverflow贡献。耶!!

相关问题