2014-10-09 58 views
1

我想實現一個簡單的服務器使用Express 4.0和解析與BodyParser消息。要測試我的服務器,我使用Postman。NodeJs,Express,BodyParse和JSON

使用x-www-form-urlencoded作爲消息模式它沒有問題,但改變消息與JSON我不能單獨使用BodyParse單獨數據。

這裏是我的代碼:

app.use(bodyParser.json()); 

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

var router = express.Router() 

router.get('/', function (req, res){ 

    res.json({message: "nd..."}) 
}) 

var sendRoute = router.route('/msg') 
sendRoute.post(function(req, res){ 

    // HERE IS THE PROBLEM****************************** 
// It works with urlencoded request but not with JSON 
    var dataparam1 = req.body.param1 
    var dataparam2 = req.body.param2 
    **************************************************** 
    . 
    . 
    . 
}) 

,讓我們說這是JSON數據,我得到形式的請求:

[{"param1":"This is the param1", 
    "param2":"This is the param2" 
}] 

這有什麼錯我的代碼?我怎樣才能得到帶有JSON格式的params?

+0

當你發送JSON請求時,console.log(req.headers ['content-type'])'在你的POST路由中顯示什麼? – mscdex 2014-10-09 12:51:41

+0

嗯......'text/plain; charset = UTF-8' – MatterGoal 2014-10-09 12:56:40

+0

在postman中,我設置了raw和JSON。 – MatterGoal 2014-10-09 12:57:01

回答

4

如果您的請求正文是作爲JSON字符串發送的,那麼您必須通過內容類型標頭告訴您的應用程序。

  1. 在郵差,單擊Headers按鈕,旁邊的下拉列表,選擇方法和URL params按鈕。 (右上)
  2. 表格將展開,在左側字段中填寫Content-Type,在右側填寫application/json
  3. 提交請求。

bodyParser可以處理多種類型的數據,但它必須知道您提交的格式。它不會嘗試猜測數據類型。

在textarea上方的下拉菜單(根據您的評論,它現在設置爲'JSON'),您在填充請求主體時僅切換語法突出顯示,但不會設置Content-Type標頭爲你。

+0

如果傳入的對象不能被解析,那麼你的JSON是無效的。你可能沒有引用鍵('{「key」:「val」} vs'{key:「val」}')。他們在JSON中不*可選。 *編輯:我看到你已經刪除了你的評論,所以我想它的工作? : - )* – RikkusRukkus 2014-10-09 14:44:08