2014-09-23 55 views
0

機制:Node.js的POST請求,快速的應用程序由擔保護照

我提出這個POST請求我的API:

request.post('http://localhost:9876/api/alerts',{body: "test"}, function (err, res, body) { 
     if (err) { 
      self.emit('log','ERROR : API error - '+err); 
     } 
     self.emit('log','RESPONSE - '+res.statusCode); 
    }); 

在服務器端,我有:

app.post('/api/alerts',function(req,res){ 
    console.log(req); 
    res.status(200).send('OK'); 
}); 

通信已完成並返回200狀態。但在服務器端,我看不到我的請求的正文。

完整的「請求」的日誌,請訪問:https://gist.github.com/xShirase/0f9de0048e5cfa40a98c,最相關的部分是:

body: {}, 

我想知道,如果它是從我用它來保護我的路線,其餘的護照中間件未來,或者,如果我只是拙劣的客戶端請求...

我已經嘗試了很多不同的請求格式在客戶端,並沒有任何工作,我有很少的護照經驗,所以請讓我知道我的問題在哪裏來自。

+1

您是否在獲取POST數據時遇到問題? I.E.如果你拿出護照中間件,它是否工作? – AlexMA 2014-09-23 20:50:07

+0

好問題。我刪除了護照中間件,同樣的事情正在發生......奇怪的是,我的API(通過網頁請求)的所有其他路由很好地工作,包括POST。只有這一個我需要POST編程失敗... – xShirase 2014-09-23 21:03:38

+0

我解決了這個問題,通過不使用request.post和構建我的請求對象,就像我通常做的那樣。仍然沒有告訴我我的request.post()有什麼問題... – xShirase 2014-09-23 21:12:27

回答

1

除非你有一個(自定義)中間件在做類似的路線/中間件鏈同期增長:

app.use(function(req, res, next) { 
    var buffer = ''; 
    req.setEncoding('utf8'); 
    req.on('data', function(d) { 
    buffer += d; 
    }).on('end', function() { 
    req.body = buffer; 
    next(); 
    }); 
}); 

,那麼你可能不應該期望req.body因爲共同體內解析模塊填充預計application/json,application/x-www-form-urlencodedmultipart/form-data之一的Content-Type。您的request()似乎沒有設置其中的任何一項,因爲它只是自由格式的數據,所以這確實是正確的,但這意味着沒有中間件正在讀取請求數據。

+0

是的,一旦我設置了標題,然後使用了一個常規請求(),它就起作用了。我有想法request.post()自動設置它們...我想我錯了:) – xShirase 2014-09-23 22:05:10