简体   繁体   中英

Node.js https.get.on(“error”, function(e){…} Not working

Whilst trying to complete a Node.js course on Treehouse.com I could not get the .on("error") handling of https.get() to work. Below is my code:

var https = require("https");

// Print out message
function printMessage(username, badgeCount, points) {
  var message = username + " has " + badgeCount + " total badge(s) and " + points + " points in JavaScript.";
  console.log(message);
}

// Print out error messages
function printError(error) {
  console.error(error.message);
}

function get(username) {
  // Connect to the API URL (https://teamtreehouse/username.json)
  var request = https.get("teamtreehouse.com/" + username + ".json", function(response){
    var body = "";
    // Read the data
    response.on("data", function (chunk) {
      body += chunk;
    });
    response.on("end", function(){
      if (response.statusCode === 200) {
        try {
          // Parse the data
          var profile = JSON.parse(body);
          // Print the data
          printMessage(username, profile.badges.length, profile.points.JavaScript);
        } catch (error) {
          // Parse Error
          printError(error);
        }
      } else {
        // Status Error
        printError({message: "The user: " + username + " can not be found. HTTP Status Code: " + response.statusCode});

      }
    });
  });
  // Connection error
  request.on("error", printError);
}

module.exports.get = get;

The protocol from the URL has been removed on purpose to cause a connection error. This should be caught by request.on("error", printError); however it is not. Instead the feedback in the console is:

https.js:191
      throw new Error('Unable to determine the domain name');
      ^

Error: Unable to determine the domain name
    at Object.exports.request (https.js:191:13)
    at Object.exports.get (https.js:201:21)
    at get (/Users/dangranger/Sites/sandbox/JavaScript/Node/profile.js:16:23)
    at Array.forEach (native)
    at Object.<anonymous> (/Users/dangranger/Sites/sandbox/JavaScript/Node/treehouseApp.js:3:7)
    at Module._compile (module.js:413:34)
    at Object.Module._extensions..js (module.js:422:10)
    at Module.load (module.js:357:32)
    at Function.Module._load (module.js:314:12)
    at Function.Module.runMain (module.js:447:10)

I am using Node.js 5.6.0

Thanks @adeneo, it appears that you are right. It appears to catch this kind of error you need a try catch block as explained in this answer Why is this basic Node.js error handling not working?

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM