web-dev-qa-db-fra.com

Erreur GET / Nodejs impossible

J'utilise le tutoriel trouvé ici: http://addyosmani.github.io/backbone-fundamentals/#create-a-simple-web-server et ajouté le code suivant.

// Module dependencies.
var application_root = __dirname,
express = require( 'express' ), //Web framework
path = require( 'path' ), //Utilities for dealing with file paths
mongoose = require( 'mongoose' ); //MongoDB integration

//Create server
var app = express();

// Configure server
app.configure( function() {
//parses request body and populates request.body
app.use( express.bodyParser() );

//checks request.body for HTTP method overrides
app.use( express.methodOverride() );

//perform route lookup based on url and HTTP method
app.use( app.router );

//Where to serve static content
app.use( express.static( path.join( application_root, 'site') ) );

//Show all errors in development
app.use( express.errorHandler({ dumpExceptions: true, showStack: true }));
});

//Start server
var port = 5000;
app.listen( port, function() {
console.log( 'Express server listening on port %d in %s mode', port, app.settings.env );
});

Après avoir démarré le serveur avec node server.js Je reçois une erreur indiquant Cannot GET / lorsque j'accède à localhost:5000 et je me demandais simplement si quelqu'un connaissait bien cette erreur en tant qu'Express et Node sont nouveaux pour moi?

11
tommyd456

Je pense que vous manquez vos routes, vous devez définir au moins une route par exemple '/' à indexer.

par exemple.

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

Avez-vous vérifié la structure de votre dossier? Il me semble qu'Express ne trouve pas votre répertoire racine, qui devrait être un dossier nommé "site" juste sous votre répertoire par défaut. Voici à quoi cela devrait ressembler, selon le tutoriel:

node_modules/
  .bin/
  express/
  mongoose/
  path/
site/
  css/
  img/
  js/
  index.html
package.json

Par exemple, sur ma machine, j'ai commencé à obtenir la même erreur que vous lorsque j'ai renommé mon dossier "site" en quelque chose d'autre. Je vous suggère donc de vérifier que vous avez la page index.html dans un dossier "site" qui se trouve sur le même chemin que votre fichier server.js.

J'espère que cela pourra aider!

5
leonardocsouza

Tout comme leonardocsouza, j'ai eu le même problème. Pour clarifier un peu, voici à quoi ressemblait ma structure de dossiers lorsque j'ai exécuté node server.js

node_modules/
app/
  index.html
  server.js

Après avoir imprimé le __dirname chemin, j'ai réalisé que le __dirname le chemin était l'endroit où mon serveur était exécuté (app/).

Donc, la réponse à votre question est la suivante:

Si votre server.js le fichier se trouve dans le même dossier que les fichiers que vous essayez de rendre, puis

app.use( express.static( path.join( application_root, 'site') ) );

devrait en fait être

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

La seule fois où vous voudriez utiliser la syntaxe d'origine que vous aviez serait si vous aviez une arborescence de dossiers comme celle-ci:

app/
  index.html
node_modules
server.js

index.html est dans le app/ répertoire, tandis que server.js est dans le répertoire racine (c'est-à-dire au même niveau que app/ répertoire).

Note latérale: Au lieu d'appeler l'utilitaire path, vous pouvez utiliser la syntaxe application_root + 'site' pour rejoindre un chemin.

Dans l'ensemble, votre code pourrait ressembler à:

// Module dependencies.
var application_root = __dirname,
express = require( 'express' ), //Web framework
mongoose = require( 'mongoose' ); //MongoDB integration

//Create server
var app = express();

// Configure server
app.configure( function() {

    //Don't change anything here...

    //Where to serve static content
    app.use( express.static( application_root ) );

    //Nothing changes here either...
});

//Start server --- No changes made here
var port = 5000;
app.listen( port, function() {
    console.log( 'Express server listening on port %d in %s mode', port, app.settings.env );
});
2
CopyLeft