2015-10-18 112 views
2

從客戶端我做:Express.js:POST數據作爲req.body對象的KEY而不是req.body的VALUE?

$.ajax({ 
     url: '/create', 
     type: 'POST', 
     data: JSON.stringify({ 
      theme: "somevalue", 
      snippet: { 
       name: "somename", 
       content: "somevalue" 
      } 
     }), 
     complete: function (response) 
     { 

     } 
    }); 

服務器(node.js/express.js)我正在做的事情:

var app = express(); 
app.use(cookieParser()); 
app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({extended: true})); 
....... 
... 
app.post('/create', function (req, res) 
{ 
    var dataReceived = req.body; 
}); 

我預期的dataReceived值是:

{ 
    "theme" : "somevalue", 
    "snippet" : { 
    "name": "somename", 
    "content" : "somevalue" 
    } 
} 

取而代之的是dataReceived的值是:

{ 
'{"theme":"somevalue","snippet":"name":"somename","content":"somevalue"}}': '' 
} 

這真的很奇怪,我找不到我做錯了什麼。有任何想法嗎?

BodyParser module documentation

bodyParser.urlencoded(選項)

返回中間件,只有解析urlencoded的機構。此解析器只接受身體的UTF-8編碼,並支持gzip的自動填充和壓縮編碼。

包含解析數據的新正文對象填充在中間件(即req.body)之後的請求對象 上。該對象將包含鍵值對,其中的值可以是字符串或數組 (當擴展爲false時)或任何類型(擴展爲true時)。

這與我的問題有關嗎?

+1

需要JSON.stringify對前端的要求。 – Safari

回答

1

在您的客戶端

$.ajax({ 
     url: '/create', 
     type: 'POST', 
     data: { 
      theme: "somevalue", 
      snippet: { 
       name: "somename", 
       content: "somevalue" 
      } 
     }, 
     complete: function (response) 
     { 

     } 
    }); 

刪除或字符串化在服務器端再解析它

app.post('/create', function (req, res) 
{ 
    var dataReceived = JSON.parse(req.body); 
}); 
你不
+0

你是對的!我仍然不知道什麼時候我的數據應該被串行化,什麼時候它不應該.. ..無論如何..謝謝! –

+0

我認爲如果你在客戶端和服務器端都做了JavaScript,那麼就不需要串口了! –