2012-11-12 9 views
28

To jest to, co mam, nazwa pliku "default.htm" faktycznie istnieje i ładuje się podczas wykonywania readFile z NodeJS.NodeJS w/Express Error: Can not GET/

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

app.use(express.static(__dirname + '/default.htm')); 

app.listen(process.env.PORT); 

Błąd (w przeglądarce):

Cannot GET/
+3

Czy któraś z odpowiedzi pomogła Ci, czy też rozwiązałeś swój problem w inny sposób? Proszę udostępnić .. – knownasilya

Odpowiedz

8

Trzeba zdefiniować trasę korzeniowy.

app.get('/', function(req, res) { 
    // do something here. 
}); 

No i nie można określić plik wewnątrz express.static. Musi to być katalog. app.get('/'.... będzie odpowiedzialny za renderowanie tego pliku odpowiednio. Możesz użyć ekspresowej metody renderowania, ale będziesz musiał dodać kilka opcji konfiguracji, które będą określać, gdzie są Twoje widoki, tradycyjnie w folderze app/views/.

24

Zazwyczaj chcą uczynić szablonów tak:

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

Jednak można również dostarczać treści statycznej - w tym celu użyć:

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

Teraz wszystko w katalogu projektu /public będzie być dostarczane jako zawartość statyczna w katalogu głównym Twojej witryny, np jeśli miejsce default.htm w folderze publicznym, jeśli będzie dostępny odwiedzając /default.htm

Spójrz Poprzez express API i Connect Static middleware docs uzyskać więcej informacji.

+0

Jak to zrobić w przypadku kanciastych? – nottinhill

+2

@SirBenBenji - nie można tego zrobić dla Angular, ponieważ jest to konfiguracja w Express. – Ben

3

Gdzie jest twoja metoda pobierania dla "/"?

Również nie możesz podawać statycznego html bezpośrednio w Express. Najpierw musisz go skonfigurować.

app.configure(function(){ 
    app.set('port', process.env.PORT || 3000); 
    app.set("view options", {layout: false}); //This one does the trick for rendering static html 
    app.engine('html', require('ejs').renderFile); 
    app.use(app.router); 

}); 

Teraz dodaj swoją metodę pobierania.

app.get('/', function(req, res) { 
    res.render('default.htm'); 
}); 
0

Miałem do czynienia z tym samym problemem, o którym mowa w pytaniu. Poniższe kroki rozwiązały mój problem.

I zmodernizowane nodejs odnośnik pakiet z następujących etapów

  1. Wyczyść KMP w cache:

    npm cache clean -f 
    
  2. Install trochę pomocnika o nazwie 'n'

    npm install -g n 
    

Potem poszedłem do node.js stronę internetową, pobrał najnowszy pakiet js js, zainstalował go, a mój problem został rozwiązany.

+0

@knownasaliya ta odpowiedź jest dla ciebie –

1

Miałem ten sam problem, więc oto, co wymyśliłem.To właśnie moja struktura folderów wyglądało kiedy wpadłem node server.js

app/ 
    index.html 
    server.js 

Po wydrukowaniu ścieżkę __dirname, zdałem sobie sprawę, że droga __dirname gdzie był mój serwer został uruchomiony (app/).

Więc odpowiedź na pytanie brzmi:

Jeśli plik server.js jest w tym samym folderze co pliki, które starają się uczynić, to

app.use(express.static(__dirname + '/default.htm')); 

powinny być rzeczywiście

app.use(express.static(__dirname)); 

Jedyny raz, kiedy chcesz użyć oryginalnej składni, którą masz d byłoby gdybyś miał drzewo folderów tak:

app/ 
    index.html 
server.js 

gdzie index.html znajduje się w katalogu app/, natomiast server.js znajduje się w katalogu głównym (tj na tym samym poziomie co katalog app/).

Ogólnie, kod mógłby wyglądać następująco:

var express = require('express'); 

var app = express(); 

app.use(express.static(__dirname)); 

app.listen(process.env.PORT); 
3

znalazłem się na tej stronie, jak byłem również otrzymaniu wiadomości Cannot GET/. Moje okoliczności różniły się, ponieważ używałem express.static() do kierowania do folderu, jak to było oferowane w poprzednich odpowiedziach, a nie do pliku w OP.

Co odkryłem po pewnym kopania przez Express' docs że express.static() definiuje swój plik indeksu jako index.html, natomiast mój plik został nazwany index.htm.

Aby powiązać to pytanie PO, istnieją dwie możliwości:

1: Użyj kodu sugerowane w innych odpowiedzi

app.use(express.static(__dirname)); 

a następnie zmień nazwę default.htm plik index.html

lub

2: Dodaj właściwość index, dzwoniąc pod numer express.static(), aby skierować ją do żądany plik indeksu:

app.use(express.static(__dirname, { index: 'default.htm' })); 
+0

Dzięki za naprawienie mojego problemu. Z jakiegoś powodu Index.html było w porządku w oknach, ale musiałem to określić w Linuksie. –

1
var path = require('path'); 

Zmian app.use(express.static(__dirname + '/default.htm')); do app.use(express.static(path.join(__dirname + '/default.htm')));.

Pamiętaj też, aby wskazać właściwą ścieżkę domyślnego pliku.html.

0

W moim przypadku zawartość statyczna została już służył:

app.use('/*', express.static(path.join(__dirname, '../pub/index.html'))); 

... i wszystko w aplikacji wydawała się polegać na tym w jakiś sposób. (path dep) require('path'))

Tak, a) tak, może to być plik; i b) możesz make a redirect!

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

Teraz każdy trafienia / dostaje /index.html które serwowane jest statycznie z ../pub/index.html.

Mam nadzieję, że to pomoże komuś innemu.