2017-03-02 2 views
0

Ich bin relativ neu. Ich habe einen Knoten-Express-Server erstellt, der lokal ausgeführt wird. Und ich habe eine index.html unter public\html Ordner. Wenn ich diese Indexseite besuche, erhalte ich einen Fehler Can't render headers after they are sent to the client node server error. Mein Verständnis ist, dass, wenn die URL localhost: 8080 plus / ist, wird index.html gerendert werden? Wie löse ich dieses Problem? Danke vielmals!Node Express-Serverfehler: Kopfzeilen können nicht gerendert werden, nachdem sie an den Client gesendet wurden

ps: Die seltsame Sache ist, dass, wenn ich Index.html aus dem Ordner "public" in das gleiche Verzeichnis mit dem Knoten server.js verschieben und zu app.get('/', function (req, res {fs.readFile('/index.html'.. ändern die index.html scheint gut zu funktionieren.

var fs = require('fs'); 
var http = require('http'); 
var https = require('https'); 
var request = require('request'); 
var XMLHttpRequest = require("xmlhttprequest").XMLHttpRequest; 
var path = require('path'); 
var express = require('express'); 
var app = express(); 
var certificate = fs.readFileSync('something.0.0.1.cert'); 
var privateKey = fs.readFileSync('something.0.0.1.key'); 

process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0"; 
app.use(express.static(__dirname+'/public')); 
app.get('/', function (req, res) { 
    fs.readFile('__dirname + '/public'+ '/html'+/index.html', function(error, content) { 
    if (error) { 
     res.writeHead(500); 
     res.end(); 
    } 
    else { 
     res.writeHead(200, { 'Content-Type': 'text/html' }); 
     res.end(content, 'utf-8'); 
    } 
}); 
    res.send('Hello World'); 
}); 

https.createServer({ 
    key: privateKey, 
    cert: certificate 
}, app).listen(8080,'0.0.0.0'); 

Antwort

1

Sie erhalten nur eine Antwort für jede Anfrage. Der Code zeigt res.send('Hello World');

Änderung dieser res.sendFile("__dirname + '/public/html/' + 'index.html' ")

Sie das zu fs.readFile Linie entfernen können.

Der Grund fs.readFile ('/ index.html') funktioniert, wenn Sie in dieselbe Datei wie Ihr Server wechseln, weil diese Zeile bedeutet, eine Datei namens index.html aus demselben Verzeichnis zu lesen. Aber Sie möchten eine Antwort auf eine Anfrage senden, nicht nur Dateien lesen.

Schauen Sie sich die Dokumentation auf res.sendFile in Express

Try this:

app.get('/', function (req, res) { 
 
     res.sendFile(__dirname + '/public/html/'+'index.html'); 
 
    });

+0

Sie meinen, die ganze Zeile 'fs.readFile ('__ dirname + '/ public' + entfernen '/html'+/index.html', Funktion (Fehler, Inhalt) '? Wie ich sage es zu lesen index.html aber nicht andere .html-Dateien dann? – user4046073

+0

aktualisiert meine Antwort mit etwas zu versuchen – Turnipdabeets

Verwandte Themen