2012-11-12 22 views
28

Dies ist, was ich habe, der Dateiname "default.htm" tatsächlich existiert und lädt, wenn Sie eine readFile mit NodeJS.NodeJS w/Express Fehler: Kann nicht GET/

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

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

app.listen(process.env.PORT); 

Der Fehler (in Browser):

Cannot GET/
+3

Hat eine der Antworten Ihnen geholfen, oder haben Sie Ihr Problem auf andere Weise gelöst? Bitte teilen .. – knownasilya

Antwort

8

Sie benötigen eine Root-Route zu definieren.

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

Oh, und Sie können eine Datei nicht im express.static angeben. Es muss ein Verzeichnis sein. Die app.get('/'.... ist dafür verantwortlich, diese Datei entsprechend zu rendern. Sie können die express-render-Methode verwenden, aber Sie müssen einige Konfigurationsoptionen hinzufügen, die Ihnen sagen, wo sich Ihre Ansichten befinden, normalerweise im Ordner app/views/.

24

Sie möchten normalerweise Vorlagen wie dies zu machen:

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

jedoch auch statische Inhalte liefern können - so verwenden zu tun:

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

Jetzt ist alles im /public Verzeichnis Ihres Projekts wird als statischer Inhalt an der Wurzel Ihrer Site geliefert werden, z wenn Sie default.htm im öffentlichen Ordner platzieren, wenn durch den Besuch /default.htm

Werfen Sie einen Blick durch die express API und Connect Static middleware docs für weitere Informationen zur Verfügung.

+0

Wie geht das bei eckigen? – nottinhill

+2

@SirBenBenji - dies kann nicht für Angular getan werden, da es sich um eine Konfiguration in Express handelt. – Ben

3

Wo ist Ihre Methode für "/"?

Auch Sie können statische HTML nicht direkt in Express dienen. Zuerst müssen Sie es konfigurieren.

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

}); 

Fügen Sie jetzt Ihre Methode holen.

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

Ich hatte das gleiche Problem wie in der Frage erwähnt. Die folgenden Schritte haben mein Problem gelöst.

aktualisierte ich die NodeJS Paket Verbindung mit folgenden Schritten

  1. Cache löscht NPM:

    npm cache clean -f 
    
  2. einen kleinen Helfer Install namens 'n'

    npm install -g n 
    

Dann bin ich zu node.js gegangen Website, heruntergeladen das neueste Knoten js Paket, installiert es, und mein Problem wurde gelöst.

+0

@knownasaliya diese Antwort ist für Sie –

1

Ich hatte das gleiche Problem, also hier ist, was ich gefunden habe.Dies ist, was meine Ordnerstruktur aussah, als ich node server.js lief

app/ 
    index.html 
    server.js 

Nach dem Druck aus dem __dirname Weg, erkennen ich, dass der __dirname Weg war, wo mein Server ausgeführt wurde (app/).

So ist die Antwort auf Ihre Frage so:

Wenn Ihr server.js Datei im selben Ordner wie die Dateien, die Sie machen wollen, dann

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

tatsächlich

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

Die einzige Zeit, die Sie die ursprüngliche Syntax verwenden möchten, die Sie ha haben d wäre, wenn Sie wie so eine Ordnerstruktur haben:

app/ 
    index.html 
server.js 

wo index.html im app/ Verzeichnis, während server.js im Stammverzeichnis (d das gleiche Niveau wie das Verzeichnis app/).

Insgesamt Code könnte wie folgt aussehen:

var express = require('express'); 

var app = express(); 

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

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

ich mich auf dieser Seite, wie ich auch die Cannot GET/ Nachricht empfangen wurde. Meine Umstände unterschieden sich, als ich express.static() verwendet habe, um einen Ordner anzusprechen, wie es in früheren Antworten angeboten wurde, und keine Datei wie das OP war.

Was ich nach einiger Graben durch Express' docs entdeckt ist, dass express.static() definiert seine Indexdatei als index.html, während meine Datei index.htm benannt wurde.

diese Frage ist auf die OP zu binden, gibt es zwei Möglichkeiten:

1: Verwenden Sie den Code in anderen Antworten vorgeschlagen

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

und dann default.htm Datei zu index.html

oder

umbenennen

2: Fügen Sie die index Eigenschaft hinzu, wenn Sie express.static() aufrufen, um es zu verweisen die gewünschte Indexdatei:

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

Danke dafür behoben mein Problem. Aus irgendeinem Grund war Index.html in Windows in Ordnung, aber ich musste es in Linux angeben. –

1
var path = require('path'); 

ändern app.use(express.static(__dirname + '/default.htm')); zu app.use(express.static(path.join(__dirname + '/default.htm')));.

Stellen Sie außerdem sicher, dass Sie auf den richtigen Pfad von default.html zeigen.

0

In meinem Fall wurde die statische Inhalte bereits serviert:

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

... und alles, was in der App auf die in irgendeiner Weise zu verlassen schien. (path ist require('path'))

Also, a) ja, es kann eine Datei sein; und b) du kannst make a redirect!

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

Jetzt kann jeder schlagen //index.html wird die statisch aus ../pub/index.html serviert wird.

Hoffe das hilft jemand anderem.