2012-11-26 32 views
3

我正在用expressjs構建我的第一個node.js站點。如何在Express中解析此HTTP POST請求?

它正在處理從 Fitbit通知我的網站上, /api/1/fitbit_update端點,像這樣的

部分:

POST /api/1/fitbit_update HTTP/1.1 
Host: myhost.dk 
Content-Type: multipart/form-data; boundary=JGUOAeGT3Fjgjcdk6s35F2mPVVyTdzgR 
Content-Length: 374 
Connection: keep-alive 

--JGUOAeGT3Fjgjcdk6s35F2mPVVyTdzgR 
Content-Disposition: form-data; name="updates"; filename="update1353963418000.json" 
Content-Type: application/json; charset=UTF-8 
Content-Transfer-Encoding: binary 

[{"collectionType":"activities","date":"2012-11-26","ownerId":"qw12er23","ownerType":"user","subscriptionId":"112233-activities"}] 
--JGUOAeGT3Fjgjcdk6s35F2mPVVyTdzgR-- 

我需要解析HTTP請求主體的JSON對象,但Express無法幫助我。

任何想法如何獲得持有的JSON對象?

我見過一些中間件的例子,但我不知道如何真正用req.on('someevent')方法來獲取內容。

req.body返回一個空對象{}

回答

3

所以這個請求是一個多部分文件上傳,你感興趣的文件是一個JSON文檔。檢查出express multipart example。你會想要做的事,如:

  • 讀連接已經在req.files.updates.path
  • 爲您保存文件解析JSON數據轉換成對象使用JSON.parse
+0

這樣做!非常感謝! –

0

嘗試req.body在帖子中路由處理。

+0

不工作。返回{}。我認爲這可能是簽名的有效載荷。 –

0

添加express.bodyParser()

爲舊版本:

app.express.createServer(
    express.cookieParser(), 
    express.bodyParser(), 
    ..... 
); 

爲較新的版本:

server.use(express.bodyParser()); 

然後,你可以通過使用req.body

+0

我已經在其他POST處理程序中成功地使用了bodyParser,但是這個HTTP有效載荷被簽名並且有點奇怪,所以它可能就是這樣。 –

0

訪問身體使用post方法從表單發送的值:電子郵件和密碼

app.post('/login', function(req, res){ 

    /* Get Errors of Validates */ 
    var errors = []; 
    req.onValidationError(function(msg) { 
     errors.push(msg); 
     //console.log('msg: ' + msg); 
     return this; 
    }); 

    /* Validates */ 
    req.sanitize('email').xss(); 
    req.sanitize('password').xss(); 

    req.assert('email', 'Range email').len(6, 40); 
    req.assert('password', 'Range password').len(6, 20); 

    //***************************************************** 
    // Value Send Post "password" --> req.body.password 
    //***************************************************** 
    var pass_shasum = crypto.createHash('sha256').update(req.body.password).digest('hex'); 

.... 

問候。

+0

HTTP有效載荷中沒有數據參數,因此這種方法無效。 –