2017-09-05 27 views
0

之前的answer需要request組件,由於學術目的和其他相關策略,我喜歡避免使用其中的組件。香草Node.js加載8.4.0,我想:如何通過Node.js發佈JSON而不使用`request`?

var https = require('https'); 
var sendData = { 
    api_key: 'abc', 
    api_secret: '123', 
    image_url: 'http://lalala.com/123/lalala.jpg', 
    return_attributes: ['gender','age'] 
}; 
var options = { 
    hostname: 'lalala.com', 
    port: '443', 
    path: '/info', 
    method: 'POST', 
    rejectUnauthorized: false, 
    requestCert: true, 
    headers: { 
    'Content-Type': 'application/json', 
    } 
}; 
var openreq = https.request(options, function(serverFeedback){ 
    if (serverFeedback.statusCode == 200) { 
    var body = ''; 
    serverFeedback.on('data', (data)=>{ body += data; }) 
     .on('end',()=>{ 
     console.log(body); 
     }); 
    } else { 
    console.log('failed'); 
    } 
}); 
openreq.write(JSON.stringify(sendData)) 
openreq.end(); 

可悲的是,上面的代碼中failed的輸出結果。

+0

你想發送JSON到網絡服務器?您必須使用'https','request'等節點模塊才能完成這項工作,同時您可以將'data'放入'options'中,並且程序將在'req.body'中發送數據,作爲請求 – turmuka

+1

添加錯誤處理程序:'openreq.on('error',(e)=> {console.error(e);});'知道錯誤原因。 – alexmac

+1

那麼'serverFeedback.statusCode'是什麼? – robertklep

回答

0

您的請求流程沒有任何問題,因爲它幾乎完全酷似Node.js文檔HTTPHTTPS指南(除了JSON Content-Type之外)。但是,你只是在尋找200反應,沒想到該錯誤可能在體內有消息前應serverFeedback.statusCode == 200條件捕獲:

serverFeedback.setEncoding('utf8'); 
serverFeedback.on('data', (chunk) => { 
    console.log(`BODY: ${chunk}`); 
}); 
serverFeedback.on('end',() => { 
    console.log('No more data in response.'); 
}); 

在任何情況下,問題肯定是與遠程主機的話,你還可以更仔細地觀察響應信息與:

console.log(`STATUS: ${serverFeedback.statusCode}`); 
console.log(`HEADERS: ${JSON.stringify(serverFeedback.headers)}`); 

還有一件事,如果你正在使用的版本,對於相同的學術目的,是值得贊同的重新考慮var利用率10 & const,以及胖箭頭功能和Promises而不是回調。

相關問題