2014-07-15 14 views
10

Tôi đang sử dụng phần mềm trung gian body-parser để mã hóa các giá trị biểu mẫu để nhận được đối tượng req.body. Nhưng khi tôi gỡ lỗi mã của tôi, phát hiện ra req.body là không xác định. Đây là mã của tôiNodejs- Req.body undefined trong bài đăng với express 4.x

var express = require('express'); 
var app = express(); 
var bodyParser = require('body-parser'); 
app.use(bodyParser.urlencoded({ extended: false })); 

Nghe bài yêu cầu

app.post('/newCategory', function (req,res) { 

      //express attached the form encoded values into body 
      var categoryName = req.body.categoryName; 
     }); 

Html Mẫu

<form action="/newCategory" role="form" method="post" class="form-inline"> 
    <input type="text" name="categoryName" placeholder="Category name" class="form-control" /> 
    <input type="submit" value="New Category" class="btn btn-primary" /> 
</form> 
+0

thể trùng lặp của [Express.js req.body không xác định] (http://stackoverflow.com/questions/9177049/express-js-req-body-undefined) – dmigo

Trả lời

2

Nếu bạn đang sử dụng urlencoded với { extended:false }, req.body sẽ trả về chuỗi nguyên chưa phân tích từ mẫu categoryName=test . Có nghĩa là req.body.categoryName sẽ không được xác định.

Hãy thử chuyển đúng để có thể phân tích dữ liệu biểu mẫu bằng mô-đun qs.

app.use(bodyParser.urlencoded({ 
    extended: true 
})); 
+1

tôi đã thử cả nhưng Tôi nhận được req.body undefined. Bất kỳ ý tưởng? –

11

Chỉ cần chạy vào cùng một vấn đề. Có vẻ như tôi đã giải quyết được sự cố của mình bằng cách di chuyển mã của tôi sang các tuyến bản đồ sau dòng urlencoded. Tôi hiện đang nhìn thấy req.body trong bài đăng.

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


// Map routes 
var controllers = require("./controllers"); 
controllers.init(app); 
+0

Dưới đây là một số câu trả lời tương tự trong một cuộc thảo luận hơi tương tự http://stackoverflow.com/a/13779626/788833 – dmigo

2

Tôi nhận thấy rằng thứ tự là rất quan trọng. Thông thường router phải được khai báo cuối cùng trước khi khởi động máy chủ. Ví dụ: 1.I nhập khẩu các tập tin cần thiết

var express   = require("express"); 
var bodyParser   = require("body-parser"); 
var morgan    = require("morgan"); 
var db    = require("./db.js"); 

var app    = express(); 

2.I tuyên bố các chất liệu khác

app.set("port", process.env.PORT || 3000); 

//app.use(express.static(__dirname + '/public')); 
app.use(morgan('dev')); // Log every request to console 
app.use(bodyParser.urlencoded({ 
    extended: true 
})); 

app.use(bodyParser.json()); 

3. SAU KHI TÔI BAO GỒM NHỮNG ĐƯỜNG - quan trọng nhất bước

var routes = require('./routes/routes'); 
routes(app); //routes shall use Express 
  1. khởi động máy chủ

    app.listen (app.get ("port"), function() { console.log ("Express server listening on port" + app.get ("cổng")); });

Và sau đó sẽ hoạt động .. Tôi không chắc chắn tại sao nhưng sau một vài lần tôi học bài học.

6

này giải quyết vấn đề đối với tôi

var bodyParser = require('body-parser'); 
var app=express(); 
app.use(bodyParser.urlencoded()); 
app.use(bodyParser.json()); 

Hy vọng điều này giúp đỡ

+0

Nếu chỉ có tôi đã vấp vào giải pháp của bạn 2 giờ trước đó, tôi có thể có một giấc ngủ ngon. Cảm ơn rất nhiều. –

1

Như mô-đun cơ thể phân tích cú pháp được sử dụng để phân tích cơ thể và các url, nó nên được gọi là trước bất kỳ cuộc gọi đến "req.body ..."

var bodyParser = require("body-parser"); 
///////req.body is undefined here 
//extended: false means you are parsing strings only (not parsing images/videos..etc) 
app.use(bodyParser.urlencoded({extended: false}); 
///////you req.body is working here (module below is using req.body) 
app.use("/", module); 
app.post('/newCategory', function (req,res) { 
    var categoryName = req.body.categoryName; 
}); 
Các vấn đề liên quan