2017-02-22 5 views
1

Ich habe dieses Problem mit dem Pfadmodul. Wenn ich versuche, „path.join ...“ zu verwenden, in der Request-Handler, ich die FehlermeldungKnoten JS erforderlich ('Pfad')

TypeError: Cannot read property 'join' of undefined

Doch, ich es durch das Laden des Moduls im Inneren des Körpers des Request beheben kann (ich es kommentiert im Code).

Können Sie erklären, warum es scheitert und warum die "Reparatur" funktioniert und was ist der gebräuchlichste Weg, damit umzugehen?

var http = require('http'); 
 
var url = require('url'); 
 
var path = require('path'); 
 
var fs = require('fs'); 
 

 
var port = 3000; 
 

 
var requestHandler = (request, response) => { 
 
    //path = require('path'); 
 
    var uri = url.parse(request.url).pathname; 
 
    
 
    
 
    var filename = path.join(process.cwd(), uri); 
 
    
 
    var path = process.cwd(); 
 
    var buffer = fs.readFileSync(path + "/someSite.html"); 
 
    response.end(buffer); 
 

 
}; 
 

 
var server = http.createServer(requestHandler); 
 

 
server.listen(port, (err) => { 
 
    if (err) { 
 
    return console.log('sum ting wong', err); 
 
    } 
 
    console.log('server is listening on ${port}'); 
 
});

Antwort

5

es kaputt ist, weil Sie w/var path = process.cwd()-path in Ihrem Request-Handler sind Neuzuordnung.

Die var Erklärung hoisted wird, die Ihre Implementierung bedeutet entspricht:

var requestHandler = (request, response) => { 
    var path; // hoisted! 
    var uri = url.parse(request.url).pathname; 

    var filename = path.join(process.cwd(), uri); 

    path = process.cwd(); 
    // ... 
}; 
+1

Der Link, den Sie die Antwort gab mir zur Verfügung gestellt; "Variablendeklaration wird vor jeder Codeausführung ausgeführt". Ich verstehe, warum Sie sagen, dass das Äquivalent ist! Vielen Dank! – Fredrik