2013-07-28 9 views
85

Próbowałem tej prostej zmiany z nasienia i utworzyłem odpowiednie pliki .html (np. Index.html).Jak używać HTML jako mechanizmu wyświetlania w Expressie?

//app.set('view engine', 'jade'); 
app.set('view engine', 'html'); 

i plik ten pozostał ten sam:

exports.index = function(req, res){ 
    res.render('index'); 
}; 

ale podczas uruchamiania pojawia

500 Błąd: Nie można odnaleźć modułu 'html'

Czy moja opcja tylko do korzystania z " ejs "? Moim zamiarem było użycie zwykłego HTML w połączeniu z AngularJS.

+7

zobaczyć ten wątek na odpowiedź: http: // stackoverflow. com/questions/4529586/render-basic-html-view-in-node-js-express Mam nadzieję, że to pomoże, – roland

+0

app.engine ('html', require ('ejs'). RenderFile); –

Odpowiedz

60

Odpowiedzi z drugiego linku będą działały, ale aby wyświetlić HTML, nie ma potrzeby korzystania z silnika widoku, chyba że chcesz skonfigurować routing funky. Zamiast tego, po prostu użyć statycznej middleware:

app.use(express.static(__dirname + '/public')); 
+0

Poszedłem dalej i skomentowałem odniesienie do app.set ("widok silnika", html). Otrzymałem komunikat o błędzie "Nie podano domyślnego silnika i nie podano rozszerzenia", co jest oczekiwane. Ale kiedy zmieniłem res.render ("index") na res.render ("index.html"), otrzymałem następujący błąd: TypeError: Property 'engine' obiektu # nie jest funkcją. – Julio

+3

Nie ma więcej mechanizmu wyświetlania, więc nie sądzę, aby 'res.render()' działało. Zamiast tego umieść surowe pliki HTML w 'public' i pozwól statycznemu oprogramowaniu middleware na bezpośrednią obsługę plików. Jeśli potrzebujesz bardziej zaawansowanych tras, prawdopodobnie możesz skonfigurować własny mechanizm wyświetlania HTML. –

+4

Więc co piszesz w wywołaniu app.get()? – ajbraus

12

spróbować tego dla swojej konfiguracji serwera

app.configure(function() { 
    app.use(express.static(__dirname + '/public'));   // set the static files location 
    app.use(express.logger('dev'));       // log every request to the console 
    app.use(express.bodyParser());       // pull information from html in POST 
    app.use(express.methodOverride());      // simulate DELETE and PUT 
    app.use(express.favicon(__dirname + '/public/img/favicon.ico')); 
}); 

wtedy twoje funkcje wywołania zwrotnego do tras będzie wyglądać następująco:

function(req, res) { 
    res.sendfile('./public/index.html'); 
}; 
0

do stron html serwera poprzez routing, zrobiłem to.

var hbs = require('express-hbs'); 
app.engine('hbs', hbs.express4({ 
    partialsDir: __dirname + '/views/partials' 
})); 
app.set('views', __dirname + '/views'); 
app.set('view engine', 'hbs'); 

i przemianowany moich .html plików .hbs plików - kierownice wspierać wersję HTML

25

Aby zaakceptować silnik renderowania HTML zamiast jade można wykonać następujące czynności;

  1. Install consolidate i swig do katalogu.

    npm install consolidate 
    npm install swig 
    
  2. Dodaj następujący linie do swojego app.js złożyć

    var cons = require('consolidate'); 
    
    // view engine setup 
    app.engine('html', cons.swig) 
    app.set('views', path.join(__dirname, 'views')); 
    app.set('view engine', 'html'); 
    
  3. dodać zobacz szablony jako .html wewnątrz folderu „Widoki”. Zrestartuj serwer węzła i uruchom aplikację w przeglądarce.

Chociaż to spowoduje renderowanie html bez żadnego problemu, polecam korzystanie z JADE przez nauczenie się go. Jade jest niesamowitym silnikiem szablonów, a uczenie się tego pomoże ci uzyskać lepszą skalowalność projektu &.

+0

Świetnie, to działa dla mnie, dzięki –

+0

nie ma metody "silnika" - po wszystkich krokach – ImranNaqvi

+0

Którą wersję ekspresu używasz? Express 4.x zawiera interfejs API app.engine. Więcej informacji jest @ http://expressjs.com/en/api.html#app.engine – AnandShanbhag

3

pliki HTML mogą być świadczone za pomocą Ejs silnika:

app.set('view engine', 'ejs'); 

I upewnij plików pod "/ views" są nazywane ".ejs".

Na przykład "index.ejs".

+0

Działa, ale wydaje się nieco hacky. Czy wiesz, czy istnieją jakieś zastrzeżenia dotyczące używania .ejs zamiast .html? Wiwaty za prawdopodobnie najszybszą poprawkę sugerują to samo! – mikeym

9

W Twoich aplikacjach.js wystarczy dodać

// view engine setup 
app.set('views', path.join(__dirname, 'views')); 
app.engine('html', require('ejs').renderFile); 
app.set('view engine', 'html'); 

Teraz można korzystać z widoku EJS silnika przy zachowaniu Pana zdaniem jako pliki .html

źródła: http://www.makebetterthings.com/node-js/how-to-use-html-with-express-node-js/

Musisz zainstalować to dwa pakiety:

`npm install ejs --save` 
`npm install path --save` 

A następnie zaimportuj potrzebne pakiety:

`var path = require('path');` 


W ten sposób można zapisać swoje widoki jako .html zamiast .ejs.
Bardzo pomocne podczas pracy z IDE, które obsługują html, ale nie rozpoznają ejs.

+1

app.set ("widoki", ścieżka.join (__ nazwa_irunku, "/ ścieżka/do/twój/folder")); app.set ("opcje wyświetlania", {układ: fałsz}); app.engine ('html', funkcja (ścieżka, opt, fn) { fs.readFile (ścieżka, 'utf-8', funkcja (błąd, str) { if (błąd) powrót str; powrót fn (null, str); }); }); –

4

Żaden silnik widoku nie jest konieczny, jeśli chcesz użyć kątowego z prostym plikiem HTML. Oto jak to zrobić: W pliku route.js:

router.get('/', (req, res) => { 
    res.sendFile('index.html', { 
    root: 'yourPathToIndexDirectory' 
    }); 
}); 
1

Aby silnik renderowania zaakceptować html zamiast jade można wykonać następujące czynności;

Install consolidate and swig to your directory. 

npm install consolidate 
npm install swig 

add following lines to your app.js file 

var cons = require('consolidate'); 

// view engine setup 
app.engine('html', cons.swig) 
app.set('views', path.join(__dirname, 'views')); 
app.set('view engine', 'html'); 

add your view templates as .html inside “views” folder. Restart you node server and start the app in the browser. 

To powinno działać

3

Odpowiedź jest bardzo prosta. Musisz użyć app.engine ("html"), aby renderować strony * .html. spróbuj tego. To musi rozwiązać problem.

app.set('views', path.join(__dirname, 'views')); 
**// Set EJS View Engine** 
app.set('view engine','ejs'); 
**// Set HTML engine** 
app.engine('html', require('ejs').renderFile); 

plik .html będzie działać

0

Wypróbuj to proste rozwiązanie, pracował dla mnie

app.get('/', function(req, res){ 
    res.render('index.ehtml') 
    }); 
Powiązane problemy