【问题标题】:NodeJs, Https POST is not respondingNodeJs,Https POST 没有响应
【发布时间】:2026-01-07 16:35:01
【问题描述】:

我正在尝试通过执行以下代码使用 nodeJS 模块 https 发布 https 请求:

 cors(req, res, () => {
    let data = {
      "password": "passwordhere",
      "receipt-data": req.body.receiptData
    };

    let headers = { 'Content-Type': 'application/json' };
    let options = {
      hostname: 'sandbox.itunes.apple.com',
      method: 'POST',
      path: '/verifyReceipt',
      headers: headers,
      port: 443
    }

    let httpsRequest = https.request(options,function(res){
        console.log('STATUS: ' + res.statusCode);
        console.log('HEADERS: ' + JSON.stringify(res.headers));
        res.on('data',function(chuck){
          responseDate+=chuck;
        });
    }) ;

    let responseDate = '';


    httpsRequest.on('error',function(e){
      console.log("inside the error");
      console.log(e);
    });

    httpsRequest.on('end',function(){
      console.log("inside the end");
      JSON.parse(responseDate)
      res.send({res:JSON.parse(responseDate)});
    });

    httpsRequest.write(JSON.stringify(data));
    httpsRequest.end();

      });
    });

结果:

所以请求时间发生了,并且 httpsRequest.on 错误/结束没有被执行!

谁能告诉我我的错在哪里?

谢谢。

【问题讨论】:

  • 如果这是一个真实的密码,你应该删除它。

标签: node.js firebase https request google-cloud-functions


【解决方案1】:

您想使用res.on('end', ...),而不是httpsRequest.on('end', ...)。请参阅the doc 中的示例。

let httpsRequest = https.request(options,function(res){
    let responseDate = '';
    console.log('STATUS: ' + res.statusCode);
    console.log('HEADERS: ' + JSON.stringify(res.headers));
    res.on('data',function(chuck){
      responseDate+=chuck;
    });
    res.on('end', function() {
        console.log("inside the end");
        // may have to url decode data here before you have the JSON that was sent
        res.send({res:responseDate});            
    });
});

httpsRequest.on('error', function(e) {
    res.status(500).send("error occurred")
});
// write data to request body
httpsRequest.write(postData);
httpsRequest.end();

但是,更好的是,我建议您只使用 requestrequest-promise 模块来为您完成所有这些工作。

const rp = require('request-promise');

rp(options).then(function(data) {
    res.json(data);
}).catch(err => {
    // handle error here
    console.log(err);
    res.status(500).send("error occurred")
});

【讨论】: