2013-02-23 35 views
6

Tôi đang cố gắng lấy các giá trị mà tôi đang gửi cho một bài đăng ajax trong ứng dụng nút của tôi. Sử dụng this post như một hướng dẫn, tôi có điều này cho đến nay:Đọc các biến bài AJAX trong Node.JS (với Express)

Trong Node:

var express = require('express'); 
var app = express(); 

var db = require('./db'); 

app.get('/sender', function(req, res) { 
    res.sendfile('public/send.html'); 
}); 

app.post('/send_save', function(req, res) { 
    console.log(req.body.id) 
    console.log(req.body.title); 
    console.log(req.body.content); 
    res.contentType('json'); 
    res.send({ some: JSON.stringify({response:'json'}) }); 
}); 

app.listen(3000); 

On ở phía AJAX:

$('#submit').click(function() { 
      alert('clicked') 
      console.log($('#guid').val()) 
      console.log($('#page_title').val()) 
      console.log($('#page-content').val()) 
      $.ajax({ 
       url: "/send_save", 
       type: "POST", 
       dataType: "json", 
       data: { 
        id: $('#guid').val(), 
        title: $('#page_title').val(), 
        content: $('#page-content').val() 
       }, 
       contentType: "application/json", 
       cache: false, 
       timeout: 5000, 
       complete: function() { 
        //called when complete 
        console.log('process complete'); 
       }, 

       success: function(data) { 
        console.log(data); 
        console.log('process sucess'); 
       }, 

       error: function() { 
        console.log('process error'); 
       }, 
       }); 
     }) 

Vấn đề này là tôi không thể req.body .id (và bất kỳ giá trị nào khác như tiêu đề hoặc nội dung), tôi nhận được lỗi này trong nút:

TypeError: Cannot read property 'id' of undefined 

Nếu tôi nhận xét thos e gọi ra mặc dù, ajax là thành công. Tôi bị lạc. Tôi có quên gì không?

+0

Tôi có cùng một vấn đề - hãy thử sử dụng 'param ('postVariableName') ' – fider

Trả lời

7

Đối tượng req bạn có ở đó không có thuộc tính body. Hãy xem http://expressjs.com/api.html#req.body:

Thuộc tính này là đối tượng chứa nội dung yêu cầu được phân tích cú pháp. Tính năng này được cung cấp bởi phần mềm trung gian bodyParser(), mặc dù phần thân khác phần mềm trung gian phân tích cú pháp cũng có thể tuân theo quy ước này. Thuộc tính này mặc định là {} khi bodyParser() được sử dụng.

Vì vậy, bạn cần phải thêm middleware bodyParser để webapp rõ ràng của bạn như thế này:

var app = express(); 
app.use(express.bodyParser()); 
+0

Ahh, tôi biết tôi đã thiếu một cái gì đó quan trọng! Tuy nhiên, khi tôi bao gồm điều này, tôi đã bắt đầu nhận được phản hồi 'Yêu cầu không hợp lệ: Yêu cầu không hợp lệ'. Điều này có liên quan trong bất kỳ cách nào? Tôi có phải cài đặt thông qua npm không? – streetlight

+0

@streetlight: Tôi không nghĩ bạn phải cài đặt bất kỳ thứ gì, nhưng tôi không biết điều gì có thể gây ra lỗi đó. – thejh

+0

Ahh được rồi, cảm ơn vì sự giúp đỡ của bạn! Có hầu như không có gì để ứng dụng này vì vậy tôi không có ý tưởng những gì đang xảy ra với yêu cầu xấu này! – streetlight

6

Vấn đề này đã thực sự được giải quyết bằng cách bao gồm các middleware bodyParser theo đề nghị của thejh.

Chỉ cần chắc chắn để truy cập vào url cung cấp câu trả lời mà như đến thăm tốc đặc điểm kỹ thuật Cập nhật: http://expressjs.com/api.html#req.body

Các tài liệu cung cấp ví dụ này (Express 4.x):

var app = require('express')(); 
var bodyParser = require('body-parser'); 
var multer = require('multer'); 

app.use(bodyParser.json()); // for parsing application/json 
app.use(bodyParser.urlencoded({ extended: true })); // for parsing application/x-www-form-urlencoded 
app.use(multer()); // for parsing multipart/form-data 

app.post('/', function (req, res) { 
    console.log(req.body); 
    res.json(req.body); 
}) 

Đối với điều này để làm việc mô-đun phân tích cú pháp nội dung cần phải được cài đặt riêng:

https://www.npmjs.com/package/body-parser

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