我已經看過幾篇與此相關的文章,但沒有一篇似乎是這裏的問題。expressjs req.body.username is undefined
這是一個非常簡單的初學者用的NodeJS應用expressjs Windows7上
/**
* 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("https://stackoverflow.com/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在響應我得到一個空對象{}
UPDATE: 這裏是從鉻響應/請求頭信息:
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: [] }
節點和快速的版本: 表達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
感謝
您可以刪除連接東西,使用express.bodyParser()。 Express是連接之上的一層,因此您不需要直接使用它。我的代碼中沒有看到任何奇怪的東西。我唯一能想到的是,因爲app.configure在windows上導致問題。你可以刪除app.configure。這是糖檢查NODE_ENV並根據該值執行該功能。 – Pickels
您的代碼似乎沒有任何明顯的問題。你安裝了什麼版本的Express?而且,自從您提到Chrome以來,您是否[檢查了](https://developers.google.com/chrome-developer-tools/docs/network)「
@Pickels是的我看到周圍後,連接已經是明確的node_module,所以我刪除了所有這一切。但是,當我刪除該端口的配置行時,我找不到頁面,因爲它似乎沒有對端口3000進行默認設置。 – isimmons