2013-06-03 9 views

Odpowiedz

16

Rozwiązanie quick'n'dirty jest dołączenie .html do wniosków, które nie mają okres w nich i dla których Plik HTML istnieje w katalogu publicznym:

var fs  = require('fs'); 
var publicdir = __dirname + '/public'; 

app.use(function(req, res, next) { 
    if (req.path.indexOf('.') === -1) { 
    var file = publicdir + req.path + '.html'; 
    fs.exists(file, function(exists) { 
     if (exists) 
     req.url += '.html'; 
     next(); 
    }); 
    } 
    else 
    next(); 
}); 
app.use(express.static(publicdir)); 
+0

Niezły. Tylko jedno pytanie. Czy to przechwyciłoby całą publiczną prośbę. Chyba, że ​​chcę obsłużyć css w publicznym katalogu, do którego dodam rozszerzenie, czy to się zepsułoby? –

+0

Rozważa tylko żądania, które nie zawierają kropki w nazwie pliku. Jeśli więc serwujesz pliki CSS z rozszerzeniem ".css", nie powinno być problemu (ale najpierw sprawdza istnienie pliku '.html', jeśli nie istnieje, po prostu nie zrobi nic i niech statyczne oprogramowanie pośrednie traktuje je jako takie). – robertklep

3

Podczas gdy odpowiedź Roberta jest bardziej elegancka, istnieje inny sposób, aby to zrobić. Dodaję tę odpowiedź tylko ze względu na kompletność. Aby wyświetlać pliki statyczne bez rozszerzenia, możesz utworzyć folder z nazwą trasy, która ma być wyświetlana, a następnie utworzyć w nim plik index.html.

Wykonywanie własnego przykładu, jeśli chcę podać hello.html pod numerem /hello. Stworzyłem katalog o nazwie hello i umieściłem w nim plik index.html. Teraz, gdy "/ hello" jest nazywane ekspresowym, automatycznie wyświetli się ten plik bez rozszerzenia.

Niby oczywiste, ponieważ jest to obsługiwane przez wszystkie frameworki internetowe, ale w tamtym czasie straciłem je.

24

można po prostu użyć opcji rozszerzenia w metodzie express.static.

app.use(express.static(path.join(__dirname, 'public'),{index:false,extensions:['html']})); 
+2

To powinna być zaakceptowana odpowiedź;) – IcanDivideBy0

+0

To rozwiązanie jest bardziej zwięzłe i eleganckie, dzięki. – phippu

+0

świetna odpowiedź dai –

0

Jeśli chcesz pójść odwrotną drogę jak ja (służąc plik HTML o nazwie „helloworld” jako html) to middleware użyłem.

var express = require('express'); 
var app = express(); 

app.use(function(req, res, next) { 
    if (req.path.indexOf('.') === -1) { 
    res.setHeader('Content-Type', 'text/html'); 
    } 
    next(); 
}); 

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

app.listen(8080, function() { 
    console.log('App listening on port 8080!'); 
}) 
Powiązane problemy