expressjs req.body.username未定义

我已经看到了几个相关的post,但没有一个似乎是这里的问题。

这是一个非常简单的初学者nodejs应用程序与windows7上expressjs

/** * Module dependencies. */ var express = require('express') , connect = require('connect') , http = require('http') var app = express(); app.configure(function(){ app.set('port', process.env.PORT || 3000); // app.use(express.bodyParser()); app.use(connect.bodyParser()); }); /** * Routes */ //get requests // app.get("/", function(req, res){ // res.send("Hello, Express!"); // }); // app.get("/hi", function(req, res){ // var message = [ // "<h1>Hello, Express!</h1>", // "<p>Welcome to 'Building Web Apps in Node.js with Express.'</p>", // "<p>You'll love Express because it's</p>", // "<ul><li>Fast</li>", // "<li>Fun</li>", // "<li>Flexible</li>" // ].join("\n"); // res.send(message); // }); // app.get("/users/:userID", function(req, res){ // res.send("<h1>Hello, User #" + req.params.userID + "!"); // }); //post requests app.post("/users", function(req, res){ // res.send(req.body); res.send(req.body.username); }); http.createServer(app).listen(app.get('port'), function(){ console.log("Express server listening on port " + app.get('port')); }); 

正如你可以看到我已经注释了其他路由只是为了确保他们不会造成问题,我也尝试安装和使用“连接”,但express.bodyParser()和connect.bodyParser()给我一样结果。

我已经使用chrome adv rest客户端扩展,并尝试以下简单的PHP表单。

 <form action="http://localhost:3000/users" method="POST" enctype="application/x-www-form-urlencoded"> <li> <label for="username">Username</label> <input type="text" name="username" id="username"> </li> <li> <input type="submit" name="submit" id="submit"> </li> </form> 

在所有情况下,我得到一个空的或未定义的req.body.username,当我在响应中尝试req.body时,我得到一个空对象{}

更新:这是来自chrome的响应/请求标题信息:

 Request URL:http://localhost:3000/users Request Method:POST Status Code:200 OK Request Headersview source Cache-Control:max-age=0 Connection:keep-alive Content-Length:31 Host:localhost:3000 Request Payload username=isimmons&submit=Submit Response Headersview source Connection:keep-alive Date:Sat, 27 Oct 2012 23:01:45 GMT Transfer-Encoding:chunked X-Powered-By:Express 

这是我发送req.route时得到的

 //result of console.log(req.route); { path: '/users', method: 'post', callbacks: [ [Function] ], keys: [], regexp: /^\/users\/?$/i, params: [] } 

节点和Express版本:表示3.0节点0.8.9

UPDATE2问题SEMI已解决请参阅下面的注释。 我应该在这里说了。 无论如何,这是从Chrome浏览器的请求标题信息,当它正常工作。

 Request URL:http://localhost:3000/users Request Method:POST Status Code:200 OK Request Headersview source Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3 Accept-Encoding:gzip,deflate,sdch Accept-Language:en-US,en;q=0.8 Cache-Control:max-age=0 Connection:keep-alive Content-Length:26 Content-Type:application/x-www-form-urlencoded Host:localhost:3000 Origin:http://localhost Referer:http://localhost/nodeform.php User-Agent:Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.16 (KHTML, like Gecko) Chrome/24.0.1305.3 Safari/537.16 Form Dataview sourceview URL encoded username:dfd submit:Submit Response Headersview source Connection:keep-alive Content-Length:3 Content-Type:text/html; charset=utf-8 Date:Sun, 28 Oct 2012 01:12:23 GMT X-Powered-By:Express 

谢谢

好吧,终于遇到了这个错误报告的其余API,只是添加内容types解决了这个问题。

错误报告

错误报告有回复,在发送之前手动添加“Content-type”标题。 这就是为什么PHP表单的工作原理。 它具有enctype集,所以我得到了完整的请求标题,如上所示。

手动添加的正确内容types标题是

 Content-Type: application/x-www-form-urlencoded