簡體   English   中英

如何在不使用`request`的情況下通過Node.js發布JSON?

[英]How to post JSON via Node.js without using `request`?

上一個答案需要request組件,由於學術目的和其他相關政策,我希望避免使用該組件。 使用香草Node.js 8.4.0,我嘗試:

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

您的請求流程沒有任何問題,因為它幾乎完全類似於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)}`);

再說一件事,如果您使用版本8 ,出於相同的學術目的,則值得重新考慮使用var ,而支持letconst ,以及胖箭頭函數和Promises而不是回調。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM