2013-05-11 29 views
21

從客戶端發送JSON數據到運行express的節點服務器時遇到問題。發佈json以表示使用jQuery

這裏有一個簡單的服務器,演示了我的問題:

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); 
}); 

這個服務器只是所有的POST數據記錄到控制檯。

如果我那麼以下內容粘貼到Chrome的開發控制檯: $.post('/', {number:1});

服務器打印出:

{ number: '1' } 
11 

我怎樣才能阻止我傳遞被解釋爲一個字符串的數字? 這與我使用的bodyParser中間件有關嗎?

任何幫助讚賞!

回答

39

$.post發送url編碼數據,所以真正發送的是number=1,然後通過bodyParser中間件進行解析。

要發送json,您必須使用JSON.stringify({number:1})

使用$.post不幸將不設置相應的Content-Type頭(反正表示將處理它),所以最好使用:

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

這工作,感謝您的解釋:) – 2013-05-11 15:21:19

+2

不要忘記要添加contentType:'application/json'頭部,否則服務器上的req.body中將沒有數據。 – 2014-03-21 07:58:07

+0

@soulcheck你可以看看我的問題嗎? https://stackoverflow.com/questions/47085674/send-object-to-nodejs-using-post-method它與此類似,但我需要發送數組的另一個屬性 – Viet 2017-11-02 22:53:32