2013-05-16 10 views
26

ich zur Zeit alle meine HTML direkt in meine app.js/server.js Datei wie folgt diene:Was ist die beste Vorgehensweise für die Bereitstellung von HTML in node.js mit express.js?

app.get('/', function(req, res) { 
    res.render('index.html'); 
}); 
app.get('/about', function(req, res) { 
    res.render('about.html'); 
}); 
app.get('/projects', function(req, res) { 
    res.render('projects.html'); 
}); 

Ich stelle mir vor, wenn ich mehr als 15 HTML-Seiten haben, dass dies wahrscheinlich nicht der beste Weg ist, sie zu nennen . Gibt es eine bessere Möglichkeit, sie aus einer anderen Datei oder einem anderen Ort zu bedienen und den Export oder etwas zu verwenden, um nur eine Funktion oder etwas in app.js aufrufen zu können? Es könnte sein, wofür das Routing ist, aber vielleicht verstehe ich es nicht so gut.

(mehr Code hinzugefügt, die in der gleichen Datei)

app.set('port', process.env.PORT || 3000); 
app.set('views', __dirname + '/public'); 

// used below code to render html files 
app.engine('html', require('ejs').renderFile); 

app.set('view engine', 'ejs'); 
app.use(express.favicon("public/img/favicon.ico")); 
app.use(express.logger('dev')); 
app.use(express.bodyParser()); 
app.use(express.methodOverride()); 
app.use(app.router); 
app.use(express.static(path.join(__dirname, 'public'))); 
+1

dies ist eher eine Frage Express.js als node.js, das Hinzufügen Tag und umformulieren Frage. – Vicary

Antwort

73

könnten Sie verwenden die static Middleware:

app.use("/", express.static(__dirname)); 

Ein Server Beispiel:

var express = require('express'); 
var app = express(); 
app.use('/', express.static(__dirname + '/public')); 
app.listen(3000, function() { console.log('listening')}); 

Dies ist Dateistruktur:

. 
├── public 
│   ├── a.html 
│   ├── b.html 
│   └── c.html 
└── server.js 

Dokumentation:

+0

Ruft das einen Aufruf auf den Rest der Seiten oder muss ich immer noch app.use ("/ about" ...) und so weiter? Wenn nicht, woher weiß es dann nur diese eine Zeile, um den Rest der Seiten zu erhalten? –

+0

Wenn Sie zum Beispiel 'app.use ("/", express.static (__ dirname + '/ public')) schreiben;' sind alle Dateien im Ordner "public" Server. –

+0

Auch hinzugefügt mehr Dateien oben für das, was ich bereits habe, die ähnlich sein könnten (wie ich einen statischen Anruf. –

6

Eine Idee wäre, eine Catch-all Art von Strecke als die letzte Strecke zu verwenden, wie die folgenden:

app.get('/:page', function(req, res) { 
    res.sendfile(path.join(__dirname, 'public', 'pages', path.basename(req.params.page) + '.html')); 
}); 

Dazu müssten Sie Ihre .html-Dateien in public/pages/about.html usw. schreiben.

Sie könnten die Reihenfolge des statischen Dateirouters ändern, so dass statische Dateien Vorrang vor Routen erhalten , es sei denn Sie diesen Weg die Dinge in den öffentlichen Ordner, wie dies wollen Fang:

App

app.set('view engine', 'ejs'); 
app.use(express.favicon("public/img/favicon.ico")); 
app.use(express.logger('dev')); 
app.use(express.bodyParser()); 
app.use(express.methodOverride()); 
app.use(express.static(path.join(__dirname, 'public'))); 
app.use(app.router); 
Verwandte Themen