2016-12-21 8 views
-1

Ich versuche, einen Server ohne Express zu erstellen. Identifizieren Sie die URL und antworten Sie dann mit einem HTML.Problem mit Ende in Nodejs

wenn die URL ‚/‘ die Antwort ist index.html und wenn die URL ‚/ bio‘ ist die Antwort bio.html

Das Problem ist, wenn ich wieder auf ‚/‘ gehen und Index nach '/ bio' erhalten

http.createServer(function (req,res){ 
    var pathName = url.parse(req.url).pathname; 
    console.log(pathName); 

    if(pathName === '/bio'){ 
    fs.readFile("./bio.html", function (a, bio){ 
     res.writeHead(200, {"Content-Type": "text/html"}); 
     res.write(bio); 
     res.end(); 
    }); 
    }; 

    fs.readFile('./index.html', function(err, index){ 
    console.log(req.url); 
    res.writeHead(200, {"Content-Type": "text/html"}); 
    res.write(index); 
    res.end(); 
    }); 

}).listen(8888); 

Wann sollte ich die Antwort beenden?

+0

Welchen Fehler bekommen Sie? –

+0

In allen Fällen servierst du index.html, gib ein 'return' Schlüsselwort vor' fs.readFile ("./bio ....' –

Antwort

1

Technisch sollten Sie zulassen, dass nur ein Codezweig res.end() aufruft.

In Ihrem Fall, sollte der Code wie folgt aussehen

if(pathName === '/bio'){ 
    fs.readFile("./bio.html", function (a, bio){ 
    res.writeHead(200, {"Content-Type": "text/html"}); 
    res.write(bio); 
    res.end(); 
    }); 
} 
else { 
    fs.readFile('./index.html', function(err, index){ 
    console.log(req.url); 
    res.writeHead(200, {"Content-Type": "text/html"}); 
    res.write(index); 
    res.end(); 
    }); 
} 

ich empfehlen würde eine allgemeine statische Datei-Handler Einführung:

// assuming we have access to the current `res` object 
function serveStatic(filePath, callback) { 
    fs.readFile(filePath, function() { 
    res.writeHead(200, {"Content-Type": "text/html"}); 
    res.write(bio); 
    res.end(); 

    callback(); 
    }) 
} 

var filePath; 
if(pathName === '/bio') { 
    filePath = './bio.html'; 
} 
else { 
    filePath = './index.html'; 
} 

serveStatic(filePath, function() { 
    console.log('Done!'); 
}); 
0

Sie den Fluss stoppen müssen, während Antwort zu senden versuchen return res.end() in Ort von res.end().

+0

Zustimmen! Die asynchrone Natur von NodeJS kann Betreuer verrückt machen. Es sollte uns helfen Wenn Sie das Gefühl haben, dass es einfach unangenehm ist, 'res.end()' zurückzugeben, können Sie unmittelbar nach 'res.end()' eine Rückkehr durchführen. –

Verwandte Themen