2017-10-20 44 views
-1

Actuellement, mon instruction if/else ne fonctionne pas correctement car elle ne va jamais à la partie else de mon code. L'application node prend un argument (process.argv [3]) et l'utilise pour choisir l'API à appeler. process.argv [4] est utilisé pour spécifier ce qu'il faut rechercher (exemple "Hier") et fonctionne correctement si un argument est fourni. Cependant, je souhaite effectuer une recherche par défaut si l'utilisateur laisse cet argument vide. Je ne suis pas sûr de savoir pourquoi il ne va jamais à l'autre partie du code. Je suis nouveau à la programmation donc je suis sûr que c'est une erreur stupide de ma part, mais j'ai essayé de réécrire la déclaration et le même problème. Toute aide serait grandement appréciée.Le code node.js ne lit pas d'autre condition lorsque l'utilisateur ne spécifie pas un argument de recherche (lit uniquement if condition)

function getSpotifySongInfo() { 
     //4th node argument is reserved for the song user wants to select 
     var query = process.argv[3]; 
     if (query !== "") { 
      //could make this less repeating code by passing the song as a parameter? 
      spotifyClient.search({ type: 'track', query: query, limit: 1 }, function (err, data) { 
       if (!err) { 
        console.log("=============Artist==Track==Album==PreviewURL============================="); 
        console.log("Artist: " + data.tracks.items[0].artists[0].name); 
        console.log("Track: " + data.tracks.items[0].name); 
        console.log("Album: " + data.tracks.items[0].name); 
        console.log("Preview URL: " + data.tracks.items[0].preview_url); 
       } else { 
        console.log(err); 
       } 
      }); 

     } else { 
      //need to make this specific for Ace of Base. For some reason it's not changing the query to reflect default song. I've tried commenting this portion out and just testing w/ a simple console.log("test") and nothing... 
      query = 'The Sign'; 
      spotifyClient.search({ type: 'track', query: query, limit: 1 }, function (err, data) { 
       if (!err) { 
        console.log("=============Artist==Track==Album==PreviewURL============================="); 
        console.log("Artist: " + data.tracks.items[0].artists[0].name); 
        console.log("Track: " + data.tracks.items[0].name); 
        console.log("Album: " + data.tracks.items[0].name); 
        console.log("Preview URL: " + data.tracks.items[0].preview_url); 
       } else { 
        console.log(err); 
       } 
      }); 
     } 
    } 
+1

Eh bien ... pour l'instant, l'initialiseur est commenté, donc 'query === undefined' – theGleep

+0

Bonne prise. J'ai commenté cette partie lors du formatage de la question à poser. Mon code actuel ne l'a pas commenté. Merci. –

+0

Initialise 'query' comme suit:' query = process.argv [3] || 'Le signe'; 'Cela affectera la valeur de' process.argv [3] 's'il a une valeur, ou s'il n'a pas de valeur, une chaîne par défaut est assignée. De cette façon, vous pouvez omettre la construction 'if .. else'. Actuellement, le comportement décrit est possible uniquement lorsque 'query' a une autre valeur que la chaîne vide. Notez que 'undefined' est aussi une valeur. Avez-vous vérifié la valeur de cette variable? – Teemu

Répondre

0

if (query !== "") est un mauvais essai et ne probablement pas ce que vous voulez. Par exemple:

var query = undefined; 
query !== "" 
// true 

query = null 
query !== "" 
// true 

Vous testez une chose très spécifique - une chaîne vide - que vous n'obtenez probablement un argument à votre fonction.

Une meilleure façon de générer beaucoup moins de code consiste à attribuer une valeur à query s'il n'en existe aucune. Vous pouvez faire quelque chose comme:

if (!query) { 
    query = 'The Sign' 
} 

vous n'avez pas besoin du code if/else du tout. Un moyen rapide et facile à faire est:

var query = process.argv[3] || 'The Sign' 

Cela soit affecter la valeur de process.argv[3] ou, si cette valeur est falsy, vous obtiendrez la valeur par défaut. C'est un modèle très courant en Javascript.

+0

merci beaucoup pour l'explication détaillée. C'est logique maintenant que vous l'avez expliqué, ma compréhension de JavaScript n'est évidemment pas complète. Merci pour votre aide et m'apprends quelque chose. –