Ich versuche herauszufinden, wie eine einfache HTML-Datei geladen und gerendert wird, damit ich keinen Code schreiben muss wie:
response.write('...<p>blahblahblah</p>...');
Ich habe gerade einen Weg gefunden, die fs-Bibliothek zu benutzen . Ich bin mir nicht sicher, ob es das sauberste ist.
var http = require('http'),
fs = require('fs');
fs.readFile('./index.html', function (err, html) {
if (err) {
throw err;
}
http.createServer(function(request, response) {
response.writeHeader(200, {"Content-Type": "text/html"});
response.write(html);
response.end();
}).listen(8000);
});
Das Grundkonzept besteht nur darin, Rohdaten zu lesen und den Inhalt zu sichern. Trotzdem offen für sauberere Optionen!
sys = require('util')
wird nicht benötigt, da nichts auf der Konsole gedruckt wird.fs.readFile
könnte innerhalb des Aufrufs von platziert werdenhttp.createServer
, sodass der Fehler behandelt werden kann. Verwenden Sie Stephens Antwort mitif (err) { console.log('something bad'); return res.end('Oops! Something bad happened.');}
Diereturn
Aussage ist die einfache Sache, die neue Benutzer möglicherweise übersehen.Verwenden Sie app.get, um die HTML-Datei abzurufen. Es ist einfach!!
So einfach ist das. Verwenden Sie dazu das Express-Modul. Express installieren:
npm install express -g
quelle
express
.var express = require('express'); var app = express();
npm install express --save
anstelle von -gSie können Dateien manuell mit dem fs-Objekt wiedergeben, aber ich würde empfehlen, das ExpressJS- Framework zu verwenden, um Ihnen das Leben zu erleichtern.
... Aber wenn Sie darauf bestehen, es auf die harte Tour zu machen:
quelle
Ich weiß, dass dies eine alte Frage ist, aber da niemand sie erwähnt hat, dachte ich, dass es sich lohnt, sie hinzuzufügen:
Wenn Sie buchstäblich statischen Inhalt bereitstellen möchten (z. B. eine "Über" -Seite, ein Bild, ein CSS usw.), können Sie eines der statischen Inhaltsbereitstellungsmodule verwenden, z. B. Node-Static. (Es gibt andere, die möglicherweise besser / schlechter sind - versuchen Sie es mit search.npmjs.org.) Mit ein wenig Vorverarbeitung können Sie dynamische Seiten aus statischen herausfiltern und an den richtigen Anforderungshandler senden.
quelle
Dies wäre wahrscheinlich etwas Besseres, da Sie die Datei (en) streamen, anstatt sie wie fs.readFile in den Speicher zu laden.
quelle
Dies ist ein Update der Antwort von Muhammed Neswine
In Express 4.x ist sendfile veraltet und die sendFile- Funktion muss verwendet werden. Der Unterschied besteht darin, dass sendfile den relativen Pfad und sendFile den absoluten Pfad verwendet. Daher wird __dirname verwendet, um eine Hardcodierung des Pfads zu vermeiden.
quelle
Es ist flexibler und einfacher, Methode zu verwenden
pipe
.quelle
Der beste Weg, den ich gelernt habe, ist die Verwendung von Express mit HTML-Dateien, da Express viele Vorteile bietet. Sie können es auch auf eine Heroku-Plattform erweitern, wenn Sie möchten. Sagen Sie einfach :)
Sauber und am besten .. !!!
quelle
Die einfache Möglichkeit besteht darin, alle Ihre Dateien, einschließlich index.html oder etwas mit allen Ressourcen wie CSS, JS usw., in einem öffentlichen Ordner abzulegen, oder Sie können ihn beliebig benennen. Jetzt können Sie Express-JS verwenden und App einfach mitteilen um den _dirname zu verwenden als:
Fügen Sie diese in Ihren server.js mit Express hinzu
und wenn Sie ein separates Verzeichnis haben möchten, fügen Sie ein neues Verzeichnis unter dem öffentlichen Verzeichnis hinzu und verwenden Sie diesen Pfad "/ public / YourDirName".
Also, was machen wir hier genau? Wir erstellen eine Expressinstanz mit dem Namen app und geben die Adresse des öffentlichen Verzeichnisses an, um auf alle Ressourcen zuzugreifen. Hoffe das hilft !
quelle
Wie wäre es mit einem Express-Modul?
Dann können Sie den Browser verwenden, um / localhost: 8000 abzurufen
quelle
quelle
response.writeHeader()
, sondernresponse.writeHead()
.response.writeHeader()
undresponse.writeHead()
beide sind gültig.Ich denke, dies wäre eine bessere Option, da die URL angezeigt wird, auf der der Server ausgeführt wird:
quelle
Sie können auch dieses Snippet verwenden:
quelle
Es ist ganz einfach, wenn Sie Pipe verwenden. Das Folgende ist das Code-Snippet server.js.
quelle
../
. Wenn Sie nur__dirname + "/index.html'
etwas ändern__dirname + requestedPageFromHeader
würden, würde der resultierende Code meiner Meinung nach diese Sicherheitsanfälligkeit aufweisen. Zeichen für Verzeichnispfade wie~
sind in Ordnung, solange Sie Folgendes angeben__dirname +
: Wenn der Benutzer den Beginn des Pfads bestimmen kann, muss er auch nach diesen suchen.Ich weiß, dass dies eine alte Frage ist. Hier ist ein einfaches Dateiserver-Dienstprogramm, wenn Sie Connect oder Express nicht verwenden möchten. sondern das http-Modul.
quelle
Verwenden Sie EJS anstelle von Jade
npm install ejs
app.js.
./routes/index.js
quelle
Dies ist eine ziemlich alte Frage ... aber wenn Ihr Anwendungsfall hier darin besteht, einfach eine bestimmte HTML-Seite ad hoc an den Browser zu senden, würde ich Folgendes verwenden:
quelle
Wir können das HTML-Dokument mit Connect Frame Work laden. Ich habe mein HTML-Dokument und die zugehörigen Bilder im öffentlichen Ordner meines Projekts abgelegt, in dem die folgenden Code- und Knotenmodule vorhanden sind.
Ich habe die readFile () -Methode von fs ausprobiert, aber die Bilder können nicht geladen werden. Deshalb habe ich das Connect-Framework verwendet.
quelle
https://gist.github.com/xgqfrms-GitHub/7697d5975bdffe8d474ac19ef906e906
Hier sind meine einfachen Demo-Codes für statische HTML-Hostdateien mithilfe des Express-Servers!
hoffe es hilft dir!
quelle