Javascript 从https请求获取响应数据时,如何修复未定义的数据?

Javascript 从https请求获取响应数据时,如何修复未定义的数据?,javascript,node.js,Javascript,Node.js,调用HTTPS响应数据时,我将值“undefined”连接到原始数据 这用于调用URL并获取响应数据 ```javascript url=“xxxxxxxx”//url是匿名的,所以不能透露 function externalApi(url){ try{ var https = require('https'); var request = https.request(url, function (response) { var str;

调用HTTPS响应数据时,我将值“undefined”连接到原始数据

这用于调用URL并获取响应数据 ```javascript url=“xxxxxxxx”//url是匿名的,所以不能透露

function externalApi(url){
    try{
      var https = require('https');
      var request = https.request(url, function (response) {
      var str;
      var statusCode;
      response.on('data', function (data) {
        str += data;
        statusCode = response.statusCode;
      });
      response.on('end', function () {
        console.log("Data is " +str);
        console.log("Status Code is " +statusCode);
      });
      request.on('error', function (e) {
        console.log('Problem with request: ' + e.message);
        console.log('Problem with request: ' + e);
      });
      request.end();
    } catch(err){
      console.log("the error is" + err);
    }
}

我希望输出是{“MESSAGE”:“找不到ID 2的日志”},但我得到的是未定义的{“MESSAGE”:“找不到ID 2的日志”}

您正在将未初始化的变量与response
str+=data连接起来。
您应该在开始时将变量初始化为空字符串

var str = '';
更改:

str += data;
致:


当您将
+=
与字符串一起使用时,您正在连接值。[un]幸运的是,当你发现一个
未定义的
变量时,javascript不会爆炸,但它也不会忽略它

在您的例子中,您声明的是
var str
,但在连接到它之前,您没有使用值初始化它。如果使用值初始化它,即:
var str='':
它将不再在消息前显示
undefined

即:


您的预期输出应该发生在哪里?没有与您描述的输出相匹配的
控制台日志。抱歉。错过了那部分。应该是数据未定义{“消息”:“找不到ID 2的日志”}谢谢您的输入。现在它运行良好。但我有一些不同的错误。我给出了一个URL,该URL执行一些POST请求。url服务将数据存储到表中。但是对于这个场景,我无法检索状态代码。我未定义为输出。下面是我得到的输出“状态代码未定义”。如何解决这个问题?@ArunElangovan如果评论中的问题不属于答案/问题,请不要在评论中提问。如果你有另一个问题,如果你只是问一个新问题会更好。不要忘记将解决问题的答案标记为已接受。只有在多次调用数据事件时,才会删除未定义的
。当多次调用数据事件时,收到的数据将丢失,因为您只需覆盖前面的
str
str = data;
// your code...
var request = https.request(url, function (response) {
    var str = ''; // this way it's not undefined
    var statusCode;
    response.on('data', function (data) {
        str += data;
        statusCode = response.statusCode;
    });
    // the rest of your code...