Ich habe eine grundlegende node.js-App, die ich mithilfe des Express-Frameworks auf den Weg bringen möchte. Ich habe einen views
Ordner, in dem ich eine index.html
Datei habe. Beim Laden des Webbrowsers wird jedoch die folgende Fehlermeldung angezeigt.
Fehler: Modul 'html' kann nicht gefunden werden
Unten ist mein Code.
var express = require('express');
var app = express.createServer();
app.use(express.staticProvider(__dirname + '/public'));
app.get('/', function(req, res) {
res.render('index.html');
});
app.listen(8080, '127.0.0.1')
Was fehlt mir hier?
Viele dieser Antworten sind veraltet.
Mit Express 3.0.0 und 3.1.0 funktioniert Folgendes:
In den Kommentaren unten finden Sie alternative Syntax und Einschränkungen für Express 3.4+:
Dann können Sie so etwas tun wie:
Dies setzt voraus, dass Sie Ihre Ansichten im
views
Unterordner haben und dasejs
Knotenmodul installiert haben . Wenn nicht, führen Sie Folgendes auf einer Knotenkonsole aus:quelle
Aus dem Express.js-Handbuch: Rendering anzeigen
Entweder erstellen Sie Ihren eigenen einfachen Renderer oder Sie verwenden einfach Jade:
Mehr über
app.register
.quelle
app.engine('.html', require('ejs').renderFile);
Sie können die HTML-Datei auch lesen und senden:
quelle
Versuche dies. Für mich geht das.
quelle
app.register
. Vielleicht ist es in Express 3.0.0.rc3 veraltet?TypeError: Object function app(req, res){ app.handle(req, res); } has no method 'register'
quelle
Wenn Sie express@~3.0.0 verwenden, ändern Sie die folgende Zeile aus Ihrem Beispiel:
zu so etwas:
Ich habe es wie auf der Express-API-Seite beschrieben gemacht und es funktioniert wie Charme. Mit diesem Setup müssen Sie keinen zusätzlichen Code schreiben, damit er für Ihre Mikroproduktion oder Tests problemlos verwendet werden kann.
Vollständiger Code unten aufgeführt:
quelle
app.use(express.static(__dirname + '/public'));
nachdem Sie den Server mit gestartet habenapp.listen
?Ich hatte auch das gleiche Problem in
express 3.X
undnode 0.6.16
. Die oben angegebene Lösung funktioniert nicht für die neueste Versionexpress 3.x
. Sie haben dieapp.register
Methode entfernt und die Methode hinzugefügtapp.engine
. Wenn Sie die oben genannte Lösung ausprobiert haben, wird möglicherweise der folgende Fehler angezeigt.Um die Fehlermeldung loszuwerden. Fügen Sie die folgende Zeile zu Ihrem hinzu
app.configure function
Hinweis: Sie müssen die
ejs
Template-Engine installierenBeispiel:
Hinweis: Die einfachste Lösung besteht darin, die ejs-Vorlage als Ansichtsmodul zu verwenden. Dort können Sie Roh-HTML in * .ejs-Ansichtsdateien schreiben.
quelle
ejs
global installieren ?Ordnerstruktur:
server.js
index.html
Ausgabe:
Hallo Welt
quelle
Wenn Sie das Verzeichnis views nicht verwenden müssen , verschieben Sie einfach HTML-Dateien in das unten stehende öffentliche Verzeichnis.
Fügen Sie diese Zeile dann in app.configure anstelle von '/ views' ein.
quelle
Um die HTML-Seite im Knoten zu rendern, versuchen Sie Folgendes:
Sie müssen das
ejs
Modulnpm
wie folgt installieren :quelle
Für mein Projekt habe ich folgende Struktur erstellt:
Dieser Code dient index.html für
/
Anforderungen und reset.css für/css/reset.css
Anforderungen. Einfach genug, und das Beste daran ist, dass automatisch Cache-Header hinzugefügt werden .quelle
1) Der beste Weg ist, einen statischen Ordner festzulegen. In Ihrer Hauptdatei (app.js | server.js | ???):
public / css / form.html
public / css / style.css
Dann haben Sie eine statische Datei aus dem "öffentlichen" Ordner:
2)
Sie können Ihren Dateicache erstellen.
Verwenden Sie die Methode fs.readFileSync
quelle
Mit Express 4.0.0 müssen Sie nur 2 Zeilen in app.js auskommentieren:
Und legen Sie dann Ihre statische Datei im Verzeichnis / public ab. Beispiel: /public/index.html
quelle
Ich habe unter 2 Zeilen hinzugefügt und es funktioniert für mich
quelle
npm install ejs --save
in Ihrem Arbeitsverzeichnis ausführen .Versuchen Sie die Funktion res.sendFile () in Express-Routen.
Lesen Sie hier: http://codeforgeek.com/2015/01/render-html-file-expressjs/
quelle
Ich wollte mich nicht auf ejs verlassen, um einfach eine HTML-Datei zu liefern, also habe ich einfach den winzigen Renderer selbst geschrieben:
quelle
Ich habe versucht, eine eckige App mit einer Express-RESTful-API einzurichten, und bin mehrmals auf dieser Seite gelandet, obwohl dies nicht hilfreich war. Folgendes hat funktioniert:
Dann sehen Sie im Rückruf für Ihre API-Routen wie folgt aus:
res.jsonp(users);
Ihr clientseitiges Framework kann das Routing übernehmen. Express dient zur Bereitstellung der API.
Meine Heimatroute sieht folgendermaßen aus:
quelle
quelle
Hier ist eine vollständige Datei-Demo von Express Server!
https://gist.github.com/xgqfrms-GitHub/7697d5975bdffe8d474ac19ef906e906
hoffe es wird dir helfen!
quelle
Fügen Sie Ihrem Code die folgenden Zeilen hinzu
Ersetzen Sie "jade" durch "ejs" & "XYZ" (Version) durch "*" in der Datei package.json
Fügen Sie dann in Ihrer app.js-Datei folgenden Code hinzu:
app.engine('html', require('ejs').renderFile);
app.set('view engine', 'html');
Und denken Sie daran, alle HTML-Dateien im Ansichtsordner zu behalten
Prost :)
quelle
Für einfaches HTML benötigen Sie kein npm-Paket oder keine Middleware
benutze einfach das:
quelle
Es ist sehr traurig, dass es um 2020 geht. Express hat noch keine Möglichkeit hinzugefügt, eine HTML-Seite ohne die
sendFile
Methode desresponse
Objekts zu rendern . Die VerwendungsendFile
ist kein Problem, aber die Weitergabe von Argumenten in Form vonpath.join(__dirname, 'relative/path/to/file')
fühlt sich nicht richtig an. Warum sollte sich ein Benutzer__dirname
dem Dateipfad anschließen? Dies sollte standardmäßig erfolgen. Warum kann das Stammverzeichnis des Servers nicht standardmäßig im Projektverzeichnis sein? Außerdem ist die Installation einer Vorlagenabhängigkeit zum Rendern einer statischen HTML-Datei erneut nicht korrekt. Ich weiß nicht, wie ich das Problem richtig angehen soll, aber wenn ich einen statischen HTML-Code bereitstellen müsste, würde ich Folgendes tun:Im obigen Beispiel wird davon ausgegangen, dass die Projektstruktur ein
views
Verzeichnis enthält und sich die statischen HTML-Dateien darin befinden. Nehmen wir zum Beispiel an, dasviews
Verzeichnis hat zwei HTML-Dateien mit dem Namen,index.html
undabout.html
um darauf zuzugreifen, können wir Folgendes besuchen:localhost:8153/index.html
oder einfachlocalhost:8153/
, um dieindex.html
Seitelocalhost:8153/about.html
zu laden und die zu ladenabout.html
. Wir können einen ähnlichen Ansatz verwenden, um eine React / Angular-App bereitzustellen, indem wir die Artefakte imviews
Verzeichnis speichern oder einfach das Standardverzeichnis verwendendist/<project-name>
und es auf dem Server js wie folgt konfigurieren:quelle
Ich wollte zulassen, dass Anfragen an "/" über eine Express-Route verarbeitet werden, wo sie zuvor von der statischen Middleware verarbeitet wurden. Dies würde es mir ermöglichen, die reguläre Version von index.html oder eine Version zu rendern, die verkettetes + minimiertes JS und CSS geladen hat, abhängig von den Anwendungseinstellungen. Inspiriert von Andrew Homeyers Antwort habe ich beschlossen, meine HTML-Dateien - unverändert - in einen Ansichtsordner zu ziehen und Express so zu konfigurieren
Und so einen Routen-Handler erstellt
Das hat ganz gut geklappt.
quelle
In server.js bitte einfügen
quelle
Wenn Sie versuchen, eine HTML-Datei bereitzustellen, in der BEREITS der gesamte Inhalt enthalten ist, muss sie nicht "gerendert", sondern nur "bereitgestellt" werden. Beim Rendern wird der Server aktualisiert oder Inhalte eingefügt, bevor die Seite an den Browser gesendet wird, und es sind zusätzliche Abhängigkeiten wie ejs erforderlich, wie die anderen Antworten zeigen.
Wenn Sie den Browser einfach auf der Grundlage ihrer Anforderung auf eine Datei leiten möchten, sollten Sie res.sendFile () wie folgt verwenden :
Auf diese Weise benötigen Sie neben Express keine zusätzlichen Abhängigkeiten. Wenn Sie nur möchten, dass der Server Ihre bereits erstellten HTML-Dateien sendet, ist dies eine sehr einfache Möglichkeit.
quelle
Legen Sie Ihre index.html-Datei in einem öffentlichen Ordner ab
Führen Sie nun den folgenden Code in Ihrem Terminal aus
quelle
Ich benutze das normalerweise
Seien Sie vorsichtig, da dadurch alles im Verzeichnis / web freigegeben wird.
Ich hoffe, es hilft
quelle
Wenn Sie das Express-Framework für node.js verwenden
installiere npm ejs
Fügen Sie dann die Konfigurationsdatei hinzu
;;
Rendern der Seite aus dem Exportmodul form.js hat die HTML-Datei im Ansichtsverzeichnis mit der Erweiterung des Dateinamens ejs als
form.html.ejs
Erstellen Sie dann die Datei form.js.
res.render('form.html.ejs');
quelle