2013-05-11 18 views
21

Tôi đang gặp sự cố khi gửi dữ liệu JSON từ máy khách đến máy chủ nút đang chạy nhanh.Đang gửi json để diễn đạt bằng cách sử dụng jQuery

Dưới đây là một máy chủ đơn giản đó chứng tỏ vấn đề của tôi:

var express = require('express'); 

var app = express(); 

app.configure(function(){ 
    app.use(express.bodyParser()); 
    app.use(app.router); 
    app.use(express.logger()); 
}); 

app.listen(80); 

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

Máy chủ này chỉ đơn giản là ghi lại tất cả dữ liệu POST ra cửa sổ Console.

Nếu tôi sau đó dán đoạn mã sau vào giao diện điều khiển sự phát triển của chrome: $.post('/', {number:1});

Các bản in máy chủ ra:

{ number: '1' } 
11 

Làm thế nào tôi có thể ngăn chặn các số tôi là đi qua được giải thích như là một chuỗi? Có liên quan gì với phần mềm trung gian bodyParser mà tôi đang sử dụng không?

Bất kỳ trợ giúp nào được đánh giá cao !!

Trả lời

39

$.post gửi dữ liệu được mã hóa url, vì vậy nội dung được gửi thực sự là number=1, sau đó được phân tích cú pháp cũng như phần mềm trung gian bodyParser.

Để gửi json bạn phải sử dụng JSON.stringify({number:1}).

Sử dụng $.post tiếc là sẽ không thiết lập các Content-Type tiêu đề thích hợp (hiện sẽ xử lý nó anyway), vì vậy nó là tốt hơn để sử dụng:

$.ajax({ 
    url: '/', 
    type: 'POST', 
    contentType: 'application/json', 
    data: JSON.stringify({number:1})} 
) 
+0

này làm việc, cảm ơn cho lời giải thích :) –

+2

Và đừng quên để thêm tiêu đề contentType: 'application/json' hoặc sẽ không có dữ liệu trong req.body tại máy chủ. –

+0

@soulcheck bạn có thể xem câu hỏi của tôi ở đây không? https://stackoverflow.com/questions/47085674/send-object-to-nodejs-using-post-method nó tương tự như thế này nhưng tôi cần phải gửi một tài sản với mảng – Viet

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