Wie entferne ich Jade, wenn ich Express mit Node.JS verwende? Ich möchte nur einfaches HTML verwenden. In anderen Artikeln habe ich gesehen, dass Leute app.register () empfohlen haben, das jetzt in der neuesten Version veraltet ist.
Wie entferne ich Jade, wenn ich Express mit Node.JS verwende? Ich möchte nur einfaches HTML verwenden. In anderen Artikeln habe ich gesehen, dass Leute app.register () empfohlen haben, das jetzt in der neuesten Version veraltet ist.
Antworten:
Sie können es so machen:
Installieren Sie ejs:
npm install ejs
Legen Sie Ihre Template-Engine in app.js als ejs fest
// app.js
app.engine('html', require('ejs').renderFile);
app.set('view engine', 'html');
Jetzt können Sie in Ihrer Routendatei Vorlagenvariablen zuweisen
// ./routes/index.js
exports.index = function(req, res){
res.render('index', { title: 'ejs' });};
Anschließend können Sie Ihre HTML-Ansicht im Verzeichnis / views erstellen.
title
in einer HTML-Datei?
Jade akzeptiert auch HTML-Eingaben.
Fügen Sie einfach einen Punkt am Zeilenende hinzu, um reines HTML zu senden.
Wenn das den Trick für Sie macht, dann versuchen Sie:
doctype html
html. // THAT DOT
<body>
<div>Hello, yes this is dog</div>
</body>
PS - HTML muss nicht geschlossen werden - das erledigt Jade automatisch.
response.sendFile
app.get('/', function (req, res) {
res.sendfile(__dirname + '/index.html');
});)
Aus der offiziellen Express-API-Referenz :
res.sendfile(path, [options], [fn]])
Übertragen Sie die Datei unter dem angegebenen Pfad.
Das Standard-Antwortheaderfeld für den Inhaltstyp basiert automatisch auf der Dateinamenerweiterung. Der Rückruf
fn(err)
wird aufgerufen, wenn die Übertragung abgeschlossen ist oder wenn ein Fehler auftritt.
res.sendFile
Stellt clientseitigen Cache über http-Cache-Header bereit, zwischenspeichert jedoch keine Dateiinhalte auf der Serverseite. Der obige Code wird bei jeder Anforderung auf die Festplatte übertragen .
sendfile
Sie können keine Vorlagen erstellen, da nur Bytes aus einer Datei gesendet werden. Außerdem würde sendfile
ich davon abraten, dies zu verwenden, da dies bedeutet, dass Sie jedes Mal, wenn eine Anfrage eingeht, auf die Festplatte stoßen - ein großer Engpass. Bei stark frequentierten Seiten sollten Sie das In-Memory-Caching wirklich durchführen.
Meiner Meinung nach ist es etwas umständlich, etwas so Großes wie ejs nur zum Lesen von HTML-Dateien zu verwenden. Ich habe gerade meine eigene Template-Engine für HTML-Dateien geschrieben, die bemerkenswert einfach ist. Die Datei sieht folgendermaßen aus:
var fs = require('fs');
module.exports = function(path, options, fn){
var cacheLocation = path + ':html';
if(typeof module.exports.cache[cacheLocation] === "string"){
return fn(null, module.exports.cache[cacheLocation]);
}
fs.readFile(path, 'utf8', function(err, data){
if(err) { return fn(err); }
return fn(null, module.exports.cache[cacheLocation] = data);
});
}
module.exports.cache = {};
Ich habe meine htmlEngine genannt, und Sie verwenden sie einfach, indem Sie sagen:
app.engine('html', require('./htmlEngine'));
app.set('view engine', 'html');
app.register()
wurde nicht abgeschrieben, sondern wurde nur in umbenannt, app.engine()
da Express 3 die Art und Weise ändert, wie Template-Engines behandelt werden .
Die Kompatibilität der Express 2.x Template Engine erforderte den folgenden Modulexport:
exports.compile = function(templateString, options) { return a Function; };
Express 3.x Template Engines sollten Folgendes exportieren:
exports.__express = function(filename, options, callback) { callback(err, string); };
Wenn eine Template-Engine diese Methode nicht verfügbar macht, haben Sie kein Pech. Mit dieser
app.engine()
Methode können Sie jede Funktion einer Erweiterung zuordnen. Angenommen, Sie hatten eine Markdown-Bibliothek und wollten .md-Dateien rendern, aber diese Bibliothek unterstützte Express nicht. Ihrapp.engine()
Aufruf sieht möglicherweise folgendermaßen aus:var markdown = require('some-markdown-library'); var fs = require('fs'); app.engine('md', function(path, options, fn){ fs.readFile(path, 'utf8', function(err, str){ if (err) return fn(err); str = markdown.parse(str).toString(); fn(null, str); }); });
Wenn Sie nach einer Template-Engine suchen, mit der Sie "einfaches" HTML verwenden können, empfehle ich doT, da es extrem schnell ist .
Denken Sie natürlich daran, dass das Express 3-Ansichtsmodell das Zwischenspeichern der Ansicht für Sie (oder Ihre Template-Engine) überlässt. In einer Produktionsumgebung möchten Sie wahrscheinlich Ihre Ansichten im Speicher zwischenspeichern, damit Sie nicht bei jeder Anforderung Festplatten-E / A ausführen.
Sie können EJS mit Express verwenden, welche Vorlagen HTML sind, aber Variablen unterstützen. Hier ist ein gutes Tutorial zur Verwendung von EJS in Express.
http://robdodson.me/blog/2012/05/31/how-to-use-ejs-in-express/
Führen Sie die folgenden Schritte aus, damit die Render-Engine HTML anstelle von Jade akzeptiert.
Installieren Sie Consolidate und wechseln Sie in Ihr Verzeichnis.
npm install consolidate
npm install swig
Fügen Sie Ihrer Datei app.js die folgenden Zeilen hinzu
var cons = require('consolidate');
// view engine setup
app.engine('html', cons.swig)
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', ‘html');
Fügen Sie Ihre Ansichtsvorlagen als .html im Ordner "Ansichten" hinzu. Starten Sie Ihren Knotenserver neu und starten Sie die App im Browser.
Obwohl dies HTML ohne Probleme rendert, würde ich Ihnen empfehlen, JADE zu verwenden, indem Sie es lernen. Jade ist eine erstaunliche Vorlagen-Engine. Wenn Sie dies lernen, können Sie ein besseres Design und eine bessere Skalierbarkeit erzielen.
Überprüfen Sie zunächst die Kompatibilitätsversion der Template-Engine anhand der folgenden Zeile
express -h
dann müssen Sie keine Ansicht aus der Liste verwenden. Wählen Sie keine Ansicht
express --no-view myapp
Jetzt können Sie alle HTML-, CSS-, JS- und Bilder im öffentlichen Ordner verwenden.
Nun, es hört sich so an, als ob Sie statische Dateien bereitstellen möchten. Und dafür gibt es eine Seite http://expressjs.com/en/starter/static-files.html
Seltsam, dass niemand auf die Dokumentation verlinkt.
In Anbetracht dessen, dass Sie Ihre Routen bereits definiert haben oder wissen, wie es geht.
app.get('*', function(req, res){
res.sendfile('path/to/your/html/file.html');
});
HINWEIS: Diese Route muss nach allen anderen platziert werden, da * alles akzeptiert.
Da Jade HTML unterstützt, können Sie dies tun, wenn Sie nur .html ext haben möchten
// app.js
app.engine('html', require('jade').renderFile);
app.set('view engine', 'html');
Dann ändern Sie einfach die Datei in den Ansichten von Jade zu HTML.
Sie können Ihre HTML-Datei auch direkt in Ihre Jade-Datei aufnehmen
include ../../public/index.html
Ursprüngliche Antwort: Express Generator ohne Jade
Wenn Sie einfaches HTML in NodeJS verwenden möchten, ohne Jade zu verwenden .. oder was auch immer:
var html = '<div>'
+ 'hello'
+ '</div>';
Persönlich mache ich das gut.
Der Vorteil ist die Einfachheit bei der Steuerung. Sie können einige Tricks verwenden, wie'<p>' + (name || '') + '</p>'
ternäre .. etc.
Wenn Sie einen eingerückten Code im Browser wünschen, können Sie Folgendes tun:
+ 'ok \
my friend \
sldkfjlsdkjf';
und benutze \ t oder \ n nach Belieben. Aber ich bevorzuge ohne, und es ist schneller.