2014-05-12 3 views
0

J'apprends Node.js et j'apprends le Javascript avancé. Dans ce code, ils utilisent Node pour faire un serveur HTTP, tout est ok et facile:Que fait dir? dir + "/": "" signifie?

var http = require("http"); 
var path = require("path"); 
var fs = require("fs"); 

var extensions = { 
".html": "text/html", 
".css": "text/css", 
".js": "application/javascript", 
".png": "image/png", 
".gif": "image/gif", 
".jpg": "image/jpeg" 
}; 

    http.createServer(function(req, res) { 

     var filename = path.basename(req.url) || "index.html"; 
     var ext = path.extname(filename); 
     var dir = path.dirname(req.url).substring(1); 
     var localPath = __dirname + "/public/"; 

     if (extensions[ext]) { 
      localPath += (dir ? dir + "/" : "") + filename; 
      path.exists(localPath, function(exists) { 
       if (exists) { 
        getFile(localPath, extensions[ext], res); 
        } else { 
          res.writeHead(404); 
          res.end(); 
          } 
      }); 
     } 

    }).listen(8000); 

Mais, je ne comprends pas ce que la construction ne dir ? dir (et pourquoi « : » » «)?

+3

[Opérateur conditionnel] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Conditional_Operator) –

+0

Thx, aide précieuse – gurrumo

Répondre

0

est égal à:

if(dir){ 
    localPath += dir + "/"; 
} 
else{ 
    localPath += ""; 
} 
+0

Merci, merci pour votre aide – gurrumo

2
localPath += (dir ? dir + "/" : "") + filename; 

est un raccourci pour

if (dir) { 
    localPath += (dir + "/") + filename; 
} else { 
    localPath += ("") + filename; 
} 

Ceci est ternary operator, plus précisément le ?: ternary operator.

P.S. J'ai laissé les parenthèses/accolades dans le code équivalent pour plus de clarté.