2016-07-10 20 views
7

Vì vậy, tôi có đoạn mã sau trong tệp server.js của mình mà tôi đang chạy với node.js. Tôi đang sử dụng Express để xử lý các yêu cầu HTTP.Bài đăng re.j.body rỗng trống

app.post('/api/destinations', function (req, res) { 
    var new_destination = req.body; 
    console.log(req.body); 
    console.log(req.headers); 
    db.Destination.create(new_destination, function(err, destination){ 
    if (err){ 
     res.send("Error: "+err); 
    } 
    res.json(destination); 
    }); 
}); 

Tôi đang chạy sau trong Terminal:

curl -XPOST -H "Content-Type: application/json" -d '{"location": "New York","haveBeen": true,"rating": 4}' http://localhost:3000/api/destinations 

Sau khi chạy mà in server.js ra như sau.

{} 
{ host: 'localhost:3000', 
    'user-agent': 'curl/7.43.0', 
    accept: '*/*', 
    'content-type': 'application/json', 
    'content-length': '53' } 

Vì vậy, req.body là {}. Tôi đọc các bài đăng khác về Stack Overflow về các vấn đề tương tự khi loại nội dung không chính xác do trình phân tích cú pháp nội dung. Nhưng đó không phải là vấn đề vì loại nội dung là ứng dụng/json.

Bất kỳ ý tưởng nào về cách lấy nội dung thực tế của yêu cầu?

Xin cảm ơn trước.

+0

Bạn sử dụng phần mềm trung gian phân tích cú pháp nội dung, phải không? – Cristy

+0

Và nếu bạn là: làm thế nào, chính xác? – robertklep

+0

Tôi đang sử dụng trình phân tích cú pháp nội dung. Về cơ bản chỉ cần yêu cầu nó sau đó "app.use (bodyParser.urlencoded ({extended: true}));" không có dấu ngoặc kép. –

Trả lời

16

Bạn cần bodyParser.json cũng như:

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

Điều này làm việc. Cám ơn rất nhiều!! Không thể tin rằng tôi đã quên điều đó. –

+2

Cảm ơn bạn! Không chắc chắn tại sao nhưng khi tôi thử 'app.use (bodyParser.json()); 'sau khi đọc bình luận của bạn, nó làm việc, mặc dù tôi đã thử nó nhiều lần trước đây. Phải là một câu trả lời kỳ diệu;) – TetraDev

+5

Tôi vẫn còn có một cơ thể trống rỗng mặc dù cả hai dòng được bao gồm. Không chắc chắn lý do tại sao. – Micrified

5

Đôi khi các chương trình req.body {} nếu bạn quên đặt thuộc tính tên cho các trường mẫu đầu vào. Sau đây là một ví dụ:

<input type="email" name="myemail" class="form-control" id="exampleInputEmail2" placeholder="Email address" required> 

Sau đó req.body lãm { myemail: '[email protected]' }

tôi gửi câu trả lời này bởi vì, tôi đã gặp phải những vấn đề tương tự và điều này đã làm việc cho tôi.

+0

tôi đã tự hỏi tại sao trình phân tích cú pháp cơ thể chỉ hoạt động với các thuộc tính "tên" trong các đầu vào, không chỉ là "id" Câu trả lời này giúp tôi rất nhiều, đôi khi chúng ta quên những điều cơ bản này. không bao giờ được sử dụng tên trong các lĩnh vực đầu vào, do đó, điều này là không bình thường với tôi. –

Các vấn đề liên quan