2012-11-12 19 views
28

Questo è ciò che ho, il nome file "default.htm" esiste effettivamente e viene caricato quando si esegue un file di lettura con NodeJS.NodeJS con errore espresso: impossibile GET/

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

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

app.listen(process.env.PORT); 

L'errore (nel browser):

Cannot GET/
+3

Qualcuno delle risposte ti ha aiutato o hai risolto il problema in un altro modo? Si prega di condividere .. – knownasilya

risposta

8

è necessario definire un percorso di root.

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

Oh, e non è possibile specificare un file all'interno della express.static. Deve essere una directory. Lo app.get('/'.... sarà responsabile di rendere tale file di conseguenza. Puoi utilizzare il metodo di rendering espresso, ma dovrai aggiungere alcune opzioni di configurazione che diranno espressamente dove si trovano le tue visualizzazioni, tradizionalmente all'interno della cartella app/views/.

24

in genere si desidera rendere i modelli in questo modo:

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

Tuttavia è anche possibile fornire contenuti statici - per fare in modo da utilizzare:

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

Ora tutto nella /public directory del vostro progetto essere consegnato come contenuto statico alla radice del tuo sito es se si inserisce default.htm nella cartella pubblica se saranno disponibili visitando /default.htm

Date uno sguardo attraverso le express API e Connect Static middleware documentazione per ulteriori informazioni.

+0

Come fare per angolare? – nottinhill

+2

@SirBenBenji - questo non può essere fatto per Angular perché è una configurazione in Express. – Ben

3

Dove è il metodo get per "/"?

Inoltre, non è possibile servire l'html statico direttamente in Express. Per prima cosa è necessario configurarlo.

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

}); 

Ora aggiungi il tuo metodo get.

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

Mi trovavo di fronte allo stesso problema menzionato nella domanda. I seguenti passaggi hanno risolto il mio problema.

ho aggiornato il collegamento pacchetto nodejs con i seguenti passaggi

  1. la cache di Clear NPM:

    npm cache clean -f 
    
  2. Installare un piccolo aiutante chiamato 'n'

    npm install -g n 
    

Poi sono andato su node.js sito Web, scaricato l'ultimo pacchetto js del nodo, installato, e il mio problema è stato risolto.

+0

@knownasaliya questa risposta è per voi –

1

Ho avuto lo stesso problema, quindi ecco cosa mi è venuto in mente.Questo è ciò che la mia struttura di cartelle sembrava quando mi sono imbattuto node server.js

app/ 
    index.html 
    server.js 

Dopo aver stampato il percorso __dirname, mi sono reso conto che il percorso __dirname era dove il mio server era in esecuzione (app/).

Quindi, la risposta alla tua domanda è questa:

Se il file server.js si trova nella stessa cartella dei file che si sta tentando di rendere, quindi

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

dovrebbe essere effettivamente

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

L'unica volta che si desidera utilizzare la sintassi originale che si ha d sarebbe se si ha una struttura di cartelle in questo modo:

app/ 
    index.html 
server.js 

dove index.html è nella directory app/, mentre server.js è nella directory principale (vale a dire allo stesso livello della directory app/).

Nel complesso, il codice potrebbe simile:

var express = require('express'); 

var app = express(); 

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

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

mi sono trovato in questa pagina come mi è stato anche ricevere il messaggio Cannot GET/. Le mie circostanze differivano come stavo usando express.static() di indirizzare una cartella, come è stato offerto nelle risposte precedenti, e non un file come l'OP era.

Quello che ho scoperto dopo un po 'di scavo attraverso Express' docs è che express.static() definisce il suo file di indice come index.html, mentre il mio file è stato nominato index.htm.

Per legare questo alla domanda del PO, ci sono due opzioni:

1: Utilizzare il codice suggerito in altre risposte

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

e quindi rinominare default.htm file index.html

o

2: Aggiungere la proprietà index quando si chiama express.static() dirigerla verso il file indice desiderato:

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

Grazie per questo ha risolto il mio problema. Per qualche motivo Index.html andava bene in Windows ma dovevo specificarlo in linux. –

1
var path = require('path'); 

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

Inoltre, assicurati di puntarlo sul percorso corretto di default.html.

0

Nel mio caso, il contenuto statico era già stata servita:

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

... e tutto in app sembrava fare affidamento su che in qualche modo. (path dep è require('path'))

Quindi, a) sì, può essere un file; e b) puoi make a redirect!

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

Ora chiunque colpire / ottiene /index.html che viene servita staticamente da ../pub/index.html.

Spero che questo aiuti qualcun altro.