Jak pozbyć się Jade podczas korzystania z Express z Node.JS? Chcę po prostu użyć zwykłego HTML. W innych artykułach widziałem, że ludzie polecali aplikację app.register (), która jest obecnie przestarzała w najnowszej wersji.
Jak pozbyć się Jade podczas korzystania z Express z Node.JS? Chcę po prostu użyć zwykłego HTML. W innych artykułach widziałem, że ludzie polecali aplikację app.register (), która jest obecnie przestarzała w najnowszej wersji.
Odpowiedzi:
Możesz to zrobić w ten sposób:
Zainstaluj ejs:
npm install ejs
Ustaw silnik szablonów w app.js jako ejs
// app.js
app.engine('html', require('ejs').renderFile);
app.set('view engine', 'html');
Teraz w pliku trasy możesz przypisać zmienne szablonu
// ./routes/index.js
exports.index = function(req, res){
res.render('index', { title: 'ejs' });};
Następnie możesz utworzyć widok html w katalogu / views.
title
w pliku html?
Jade akceptuje również dane wejściowe HTML.
Po prostu dodaj kropkę na końcu linii, aby rozpocząć przesyłanie czystego kodu HTML.
Jeśli to wystarczy, spróbuj:
doctype html
html. // THAT DOT
<body>
<div>Hello, yes this is dog</div>
</body>
PS - Nie ma potrzeby zamykania HTML - to robi automagicznie Jade.
response.sendFile
app.get('/', function (req, res) {
res.sendfile(__dirname + '/index.html');
});)
Z oficjalnego odniesienia do wyraźnego interfejsu API :
res.sendfile(path, [options], [fn]])
Prześlij plik na podaną ścieżkę.
Automatycznie ustawia domyślne pole nagłówka odpowiedzi Content-Type na podstawie rozszerzenia nazwy pliku. Wywołanie zwrotne
fn(err)
jest wywoływane po zakończeniu przesyłania lub w przypadku wystąpienia błędu.
res.sendFile
udostępnia pamięć podręczną po stronie klienta za pośrednictwem nagłówków pamięci podręcznej http, ale nie buforuje zawartości plików po stronie serwera. Powyższy kod trafi na dysk przy każdym żądaniu .
sendfile
nie pozwala na tworzenie szablonów, ponieważ wysyła tylko bajty z pliku. Ponadto odradzałbym używanie w sendfile
ten sposób, ponieważ oznacza to, że będziesz uderzać w dysk za każdym razem, gdy pojawi się żądanie - ogromne wąskie gardło. W przypadku stron o dużym natężeniu ruchu naprawdę należy wykonywać buforowanie w pamięci.
Moim zdaniem używanie czegoś tak dużego jak ejs tylko do odczytu plików html jest nieco uciążliwe. Właśnie napisałem własny silnik szablonów dla plików html, który jest niezwykle prosty. Plik wygląda następująco:
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 = {};
Nazwałem mój htmlEngine, a sposób, w jaki go używasz, jest po prostu mówiąc:
app.engine('html', require('./htmlEngine'));
app.set('view engine', 'html');
app.register()
nie został zdeprecjonowany, po prostu zmieniono jego nazwę na app.engine()
odkąd Express 3 zmienia sposób obsługi silników szablonów .
Zgodność z silnikiem szablonów Express 2.x wymagała następującego eksportu modułu:
exports.compile = function(templateString, options) { return a Function; };
Silniki szablonów Express 3.x powinny eksportować następujące elementy:
exports.__express = function(filename, options, callback) { callback(err, string); };
Jeśli silnik szablonów nie ujawnia tej metody, nie pecha,
app.engine()
metoda umożliwia mapowanie dowolnej funkcji do rozszerzenia. Załóżmy, że masz bibliotekę Markdown i chcesz renderować pliki .md, ale ta biblioteka nie obsługuje Express, twojeapp.engine()
wywołanie może wyglądać mniej więcej tak: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); }); });
Jeśli szukasz silnika do tworzenia szablonów, który pozwala używać „zwykłego” HTML-a, polecam doT, ponieważ jest niezwykle szybki .
Oczywiście pamiętaj, że model widoku Express 3 pozostawia buforowanie widoku Tobie (lub Twojemu silnikowi szablonów). W środowisku produkcyjnym prawdopodobnie chcesz buforować swoje widoki w pamięci, aby nie wykonywać operacji we / wy dysku przy każdym żądaniu.
Możesz używać EJS z wyrażeniami, które szablony są HTML, ale obsługują zmienne. Oto dobry samouczek dotyczący korzystania z EJS w trybie ekspresowym.
http://robdodson.me/blog/2012/05/31/how-to-use-ejs-in-express/
Aby silnik renderujący akceptował html zamiast jade, możesz wykonać następujące kroki;
Zainstaluj konsolidację i przenieś do swojego katalogu.
npm install consolidate
npm install swig
dodaj następujące wiersze do pliku app.js.
var cons = require('consolidate');
// view engine setup
app.engine('html', cons.swig)
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', ‘html');
dodaj szablony widoków jako .html do folderu „widoki”. Zrestartuj swój serwer węzłowy i uruchom aplikację w przeglądarce.
Chociaż spowoduje to bezproblemowe renderowanie html, polecam korzystanie z JADE, ucząc się go. Jade to niesamowity silnik szablonów, którego poznanie pomoże Ci osiągnąć lepszy projekt i skalowalność.
najpierw sprawdź kompatybilność wersji silnika szablonów, używając poniższego wiersza
express -h
wtedy nie musisz używać żadnego widoku z listy. wybierz brak widoku
express --no-view myapp
teraz możesz używać wszystkich swoich html, css, js i obrazów w folderze publicznym.
Cóż, wygląda na to, że chcesz obsługiwać pliki statyczne. Jest też taka strona http://expressjs.com/en/starter/static-files.html
Dziwne, że nikt nie łączy się z dokumentacją.
Biorąc pod uwagę, że masz już zdefiniowane trasy lub wiesz, jak to zrobić.
app.get('*', function(req, res){
res.sendfile('path/to/your/html/file.html');
});
UWAGA: ta trasa musi być umieszczona po wszystkich innych, ponieważ * akceptuje wszystko.
ponieważ Jade obsługuje HTML, możesz to zrobić, jeśli chcesz mieć tylko rozszerzenie .html
// app.js
app.engine('html', require('jade').renderFile);
app.set('view engine', 'html');
następnie po prostu zmień plik w widokach z jade na html.
Możesz również bezpośrednio dołączyć plik html do pliku jade
include ../../public/index.html
Oryginalna odpowiedź: ekspresowy generator bez jadeitu
Jeśli chcesz używać zwykłego html w nodeJS, bez używania jade .. lub cokolwiek innego:
var html = '<div>'
+ 'hello'
+ '</div>';
Osobiście dobrze sobie z tym radzę.
Zaletą jest prostota podczas sterowania. Możesz użyć kilku sztuczek, takich jak '<p>' + (name || '') + '</p>'
trójskładnik ... itd
Jeśli chcesz mieć wcięty kod w przeglądarce, możesz zrobić:
+ 'ok \
my friend \
sldkfjlsdkjf';
i używaj \ t lub \ n do woli. Ale wolę bez, a do tego jest szybszy.