2012-03-28 86 views
22

我正在使用Node.JS和Restify今晚的簡單API,並通過req.params.fieldname接收參數方面的一切罰款。我安裝了CouchDB和Cradle,以便開始嘗試將這些參數放入數據庫中,但是在安裝完所有內容之後,req.params開始回覆爲空!節點(快速)請求正文空

因爲其他原因,我應該一直使用Express來開始,所以我嘗試切換到,看看我能否得到它的工作,但沒有這樣的運氣。

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

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

app.post('/', function(req, res){ 
    res.send(req.body); 
}); 

app.listen(8080, function() { 
    console.log('Printomatic listening at', app.url); 
}); 

我試過無數的變化,但不管什麼req.body回來空。我使用HTTP控制檯進行測試,並與內容{"name":"foobar"}

發送事情就這麼簡單POST /我很沮喪,在這一點上,我開始懷疑我是在安裝底座/ CouchDB的時候爆發的東西(這分別安裝了NPM和Homebrew)。任何幫助將不勝感激,因爲這有些時間敏感。感謝您提前提供任何幫助!

+0

如果嘗試app.get('/',function(req,res){res.send('Hello World');};然後執行獲取請求? – bryanmac 2012-03-28 05:28:20

回答

69

你提到你張貼JSON數據({"name": "foobar"})。確保你發送了Content-Type: application/json,否則bodyParser不會解析它。

例如爲:

$ curl -d 'user[name]=tj' http://local/ 
$ curl -d '{"user":{"name":"tj"}}' -H "Content-Type: application/json" http://local/ 

這是因爲bodyParser解析application/jsonapplication/x-www-form-encodedmultipart/form-data,它選擇要使用基於所述Content-Type哪個分析器。

+4

我覺得自己像個白癡。我正在使用http-console,並且由於某種原因我猜這些頭文件發生了變化!謝謝! – 2012-03-28 22:44:45

+2

我使用的是Postman REST客戶端,它在我使用form-data時工作,但在發送raw時不起作用。謝謝 – 2014-02-01 07:41:54

+1

謝謝Nikhil!我和Postman有同樣的問題,我們必須設置標頭:Content-Type(無冒號)和Value:application/json – 2015-03-09 20:03:57