2013-05-16 22 views
26
Şu anda benim app.js tüm benim html hakkı hizmetine sunuyorum

/server.js dosyası: Bu onları aramak için en iyi yolu muhtemelen olmadığını 15+ html sayfalar varsanode.js'de express.js ile html sunmanın en iyi yolu nedir? Böyle

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'); 
}); 

hayal . Onları başka bir dosyadan veya konumdan sunmanın ve yalnızca bir işlevi veya bir şeyi app.js. Yönlendirmenin ne olduğu olabilir ama belki de çok iyi anlamıyorum.

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

Bir sunucu örneği:

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

Bu

(aynı dosyada olduğu katma daha kod)

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

bu node.js daha bir express.js soru daha, etiket ekleme ve soru yeniden ifade. – Vicary

cevap

73

Sen static ortakatmanını kullanabilirsiniz dosya yapısı:

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

Dokümantasyon:

+0

Bu, tüm sayfaların geri kalanını çağırıyor mu yoksa app.use ("/ about" ...) kullanmaya devam etmek zorunda mıyım? Eğer değilse, o zaman sayfaların geri kalanını almak için sadece bir satırdan ne biliyor? –

+0

Örneğin, “app.use ("/", express.static (__ dirname + '/ public'));' 'public' klasöründeki tüm dosyalar sunucu olacaktır. –

+0

Ayrıca, daha önce sahip olabildiğim için daha fazla dosya ekledim (statik bir çağrı kullandığım gibi. –

6

Bir fikir aşağıdaki gibi son rota olarak rotanın bir catch-all tür kullanmak olacaktır:

app.get('/:page', function(req, res) { 
    res.sendfile(path.join(__dirname, 'public', 'pages', path.basename(req.params.page) + '.html')); 
}); 
Eğer about.html/kamu/sayfalar halinde .html dosyaları koymak gerektirecektir 210

vb

Statik dosyalar yolları önceliklidir olsun, böylece statik dosya yönlendirici sıralamasını değiştirmek isteyebilirsiniz

de , böyle ortak klasöre şeyler yakalamak o rotayı, istemedikçe:

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); 
İlgili konular