Mam podstawową aplikację node.js, którą próbuję uruchomić z poziomu frameworka Express. Mam views
folder, w którym mam index.html
plik. Ale podczas ładowania przeglądarki pojawia się następujący błąd.
Błąd: nie można znaleźć modułu „HTML”
Poniżej znajduje się mój kod.
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')
Czego tu brakuje?
Wiele z tych odpowiedzi jest nieaktualnych.
Przy użyciu ekspresowych wersji 3.0.0 i 3.1.0 działa:
Zobacz komentarze poniżej dotyczące alternatywnej składni i zastrzeżeń dla ekspresu 3.4+:
Następnie możesz zrobić coś takiego:
Zakłada się, że masz swoje widoki w
views
podfolderze i że zainstalowałeśejs
moduł węzła. Jeśli nie, uruchom następujące polecenie na konsoli węzła:źródło
Z Przewodnika Express.js: Wyświetl renderowanie
Więc albo stwórz swój własny prosty renderer, albo po prostu użyjesz jadeitu:
Więcej o
app.register
.źródło
app.engine('.html', require('ejs').renderFile);
Możesz także przeczytać plik HTML i wysłać go:
źródło
Spróbuj tego. mi to pasuje.
źródło
app.register
. Być może został on przestarzały w Express 3.0.0.rc3?TypeError: Object function app(req, res){ app.handle(req, res); } has no method 'register'
źródło
Jeśli używasz express@~3.0.0, zmień poniższy wiersz z przykładu:
do czegoś takiego:
Zrobiłem to tak, jak opisano na stronie ekspresowego interfejsu API i działa jak urok. Dzięki tej konfiguracji nie musisz pisać dodatkowego kodu, dzięki czemu korzystanie z niego do mikrodukcji lub testowania staje się łatwe.
Pełny kod wymieniony poniżej:
źródło
app.use(express.static(__dirname + '/public'));
po uruchomieniu serweraapp.listen
?Ten sam problem spotkałem również w
express 3.X
inode 0.6.16
. Powyższe rozwiązanie nie będzie działać w najnowszej wersjiexpress 3.x
. Usunęliapp.register
metodę i dodaliapp.engine
metodę. Jeśli wypróbowałeś powyższe rozwiązanie, może wystąpić następujący błąd.Aby pozbyć się komunikatu o błędzie. Dodaj następujący wiersz do swojego
app.configure function
Uwaga: musisz zainstalować
ejs
silnik szablonówPrzykład:
Uwaga: najprostszym rozwiązaniem jest użycie szablonu ejs jako silnika przeglądania. Tam możesz pisać nieprzetworzony HTML w plikach przeglądania * .ejs.
źródło
ejs
globalnie?struktura folderów:
server.js
index.html
wynik:
Witaj świecie
źródło
Jeśli nie musisz korzystać z katalogu views , po prostu przenieś pliki HTML do katalogu publicznego poniżej.
a następnie dodaj tę linię do app.configure zamiast „/ views”.
źródło
Aby wyświetlić stronę HTML w węźle, spróbuj wykonać następujące czynności:
Musisz zainstalować
ejs
moduł poprzeznpm
:źródło
Dla mojego projektu stworzyłem następującą strukturę:
Ten kod obsługuje index.html dla
/
żądań i reset.css dla/css/reset.css
żądań. To dość proste, a najlepsze jest to, że automatycznie dodaje nagłówki pamięci podręcznej .źródło
1) Najlepszym sposobem jest ustawienie folderu statycznego. W głównym pliku (app.js | server.js | ???):
public / css / form.html
public / css / style.css
Następnie masz plik statyczny z folderu „publicznego”:
2)
Możesz utworzyć pamięć podręczną plików.
Użyj metody fs.readFileSync
źródło
W Express 4.0.0 jedyne, co musisz zrobić, to skomentować 2 wiersze w app.js:
A następnie upuść plik statyczny do katalogu / public. Przykład: /public/index.html
źródło
Dodałem poniżej 2 linii i to działa dla mnie
źródło
npm install ejs --save
w swoim katalogu roboczym.Wypróbuj funkcję res.sendFile () na trasach ekspresowych.
Przeczytaj tutaj: http://codeforgeek.com/2015/01/render-html-file-expressjs/
źródło
Nie chciałem polegać na ejs po prostu dostarczając plik HTML, więc po prostu sam napisałem mały renderer:
źródło
Próbowałem skonfigurować aplikację kątową z ekspresowym interfejsem API RESTful i wylądowałem na tej stronie wiele razy, ale nie było to pomocne. Oto, co znalazłem, które zadziałało:
Następnie w wywołaniu zwrotnym dla twoich tras API wygląda następująco:
res.jsonp(users);
Struktura po stronie klienta może obsługiwać routing. Express służy do obsługi interfejsu API.
Moja domowa trasa wygląda następująco:
źródło
źródło
Oto pełna wersja demonstracyjna serwera ekspresowego!
https://gist.github.com/xgqfrms-GitHub/7697d5975bdffe8d474ac19ef906e906
mam nadzieję, że ci to pomoże!
źródło
Dodaj następujące linie do swojego kodu
Zamień „jade” na „ejs” i „XYZ” (wersja) na „*” w pliku package.json
Następnie w pliku app.js dodaj następujący kod:
app.engine('html', require('ejs').renderFile);
app.set('view engine', 'html');
I pamiętaj Zachowaj wszystkie pliki .HTML w folderze widoków
Twoje zdrowie :)
źródło
W przypadku zwykłego html nie potrzebujesz pakietu npm ani oprogramowania pośredniego
po prostu użyj tego:
źródło
To bardzo smutne, że około 2020 roku wciąż express nie dodał sposobu renderowania strony HTML bez użycia
sendFile
metodyresponse
obiektu. UżywaniesendFile
nie jest problemem, ale przekazywanie argumentów w formiepath.join(__dirname, 'relative/path/to/file')
nie wydaje się właściwe. Dlaczego użytkownik powinien dołączyć__dirname
do ścieżki pliku? Powinno to być zrobione domyślnie. Dlaczego katalog główny serwera nie może być przez defalutowanie katalogu projektu? Ponadto instalacja zależności szablonów tylko w celu renderowania statycznego pliku HTML jest znowu niepoprawna. Nie znam właściwego sposobu rozwiązania tego problemu, ale gdybym musiał podać statyczny kod HTML, zrobiłbym coś takiego:Powyższy przykład zakłada, że struktura projektu ma
views
katalog i znajdują się w nim statyczne pliki HTML. Na przykład, powiedzmy,views
katalog zawiera dwa pliki HTML nazwanychindex.html
iabout.html
, następnie, aby uzyskać do nich dostęp, możemy odwiedzić:localhost:8153/index.html
albo po prostulocalhost:8153/
załadowaćindex.html
stronę ilocalhost:8153/about.html
aby załadowaćabout.html
. Możemy zastosować podobne podejście do obsługi aplikacji reagującej / kątowej, przechowując artefakty wviews
katalogu lub po prostu używającdist/<project-name>
katalogu domyślnego i konfigurując go w serwerze js w następujący sposób:źródło
Chciałem zezwolić, aby żądania do „/” były obsługiwane przez trasę ekspresową, gdzie wcześniej były obsługiwane przez oprogramowanie pośrednie statyki. Pozwoliłoby mi to renderować zwykłą wersję pliku index.html lub wersję, która załadowała konkatenację + zminimalizowany JS i CSS, w zależności od ustawień aplikacji. Zainspirowany odpowiedzią Andrew Homeyera postanowiłem przeciągnąć moje pliki HTML - niezmodyfikowane - do folderu widoków, tak skonfigurować Express
I tak utworzył moduł obsługi trasy
To działało całkiem dobrze.
źródło
Dołącz do server.js
źródło
Jeśli próbujesz podać plik HTML, który JUŻ zawiera w sobie całą jego zawartość, nie trzeba go „renderować”, wystarczy go „doręczyć”. Renderowanie ma miejsce, gdy masz aktualizację serwera lub wstrzykujesz zawartość przed wysłaniem strony do przeglądarki i wymaga ona dodatkowych zależności, takich jak ejs, jak pokazują inne odpowiedzi.
Jeśli chcesz po prostu skierować przeglądarkę do pliku na podstawie ich żądania, powinieneś użyć res.sendFile () w następujący sposób:
W ten sposób nie potrzebujesz dodatkowych zależności oprócz express. Jeśli chcesz, aby serwer wysyłał już utworzone pliki HTML, powyższe jest bardzo lekkim sposobem.
źródło
Umieść plik index.html w folderze publicznym
Teraz uruchom następujący kod w swoim terminalu
źródło
Zwykle tego używam
Bądź ostrożny, ponieważ udostępni to wszystko w katalogu / web.
Mam nadzieję, że to pomoże
źródło
jeśli używasz Express Framework do node.js
zainstaluj npm ejs
następnie dodaj plik konfiguracyjny
;
wyrenderuj stronę z modułu eksportu form.js plik html w katalogu widoków z rozszerzeniem nazwy pliku ejs jako
form.html.ejs
następnie utwórz plik form.js
res.render('form.html.ejs');
źródło