web-dev-qa-db-fra.com

NodeJS w/Express Error: Impossible d'obtenir /

C'est ce que j'ai, le nom de fichier "default.htm" existe réellement et se charge lorsque vous faites un readFile avec NodeJS.

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

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

app.listen(process.env.PORT);

L'erreur (dans le navigateur):

Cannot GET /
43
sia

Vous voulez généralement rendre les modèles comme ceci:

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

Cependant, vous pouvez également fournir du contenu statique. Pour ce faire, utilisez:

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

Désormais, tout le contenu du répertoire /public de votre projet sera fourni sous forme de contenu statique à la racine de votre site, par exemple. si vous placez default.htm dans le dossier public si sera disponible en visitant /default.htm

Jetez un coup d'oeil à travers les intergiciels express API et Connect Static docs pour plus d'informations.

31
Sdedelbrock

Vous devez définir un itinéraire racine.

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

Oh et vous ne pouvez pas spécifier un fichier dans le express.static. Ce doit être un répertoire. Le app.get('/'.... sera responsable de rendre ce fichier en conséquence. Vous pouvez utiliser la méthode de rendu 'express', mais vous devrez ajouter quelques options de configuration qui indiqueront à Express où se trouvent vos vues, traditionnellement dans le dossier app/views/.

9
Daniel

Je me suis retrouvé sur cette page car je recevais aussi le message Cannot GET/. Mes circonstances différaient car j'utilisais express.static() pour cibler un dossier, comme cela était proposé dans les réponses précédentes, et non un fichier comme l'OP.

Ce que j'ai découvert après quelques recherches dans Express 'docs est que express.static() définit son fichier d’index comme étant index.html, alors que mon fichier s’appelait index.htm.

Pour lier cela à la question du PO, il y a deux options:

1: Utilisez le code suggéré dans d'autres réponses

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

puis renommez default.htm fichier en index.html

ou

2: Ajoutez la propriété index lorsque vous appelez express.static() pour le diriger vers le fichier d'index souhaité:

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

J'ai eu le même problème, alors voici ce que je suis venu avec. Voici à quoi ressemblait ma structure de dossiers lorsque j’exécutais node server.js

app/
  index.html
  server.js

Après avoir imprimé le chemin __dirname, je me suis rendu compte que le chemin __dirname était celui où mon serveur fonctionnait (app/). 

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

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

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

devrait effectivement être

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

La seule fois où vous voudriez utiliser la syntaxe originale que vous auriez serait si vous aviez une arborescence de dossiers comme ceci:

app/
  index.html
server.js

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

Globalement, votre code pourrait ressemblerait à:

var express = require('express');

var app = express();

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

app.listen(process.env.PORT);
5
CopyLeft

Où est votre méthode get pour "/"?

De plus, vous ne pouvez pas servir du code HTML statique directement dans Express.Tout d'abord, vous devez le configurer.

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

});

Maintenant, ajoutez votre méthode get.

app.get('/', function(req, res) {
  res.render('default.htm');
});
3
Serdar Dogruyol
var path = require('path');

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

Assurez-vous également que vous pointez le bon chemin sur votre fichier default.html.

1
Wambua Makenzi

J'ai eu le même problème. Résolu par de petits changements comme ci-dessous.

var express = require('express');
var app = express();
app.use(express.static(path.join(__dirname, 'public')));

Vous avez obtenu l’aide de ici (Documentation ExpressJS - Gestion de fichiers statiques).

1

Dans mon cas, le contenu statique était déjà diffusé:

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

... et tout dans l'application semblait en quelque sorte s'en remettre à cela. (path dep est require('path'))

Donc, a) oui, cela peut être un fichier; et b) vous pouvez faire une redirection !

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

Désormais, tous ceux qui cliquent sur / obtiennent /index.html qui est servi statiquement à partir de ../pub/index.html.

J'espère que ceci aide quelqu'un d'autre.

0
Chaim Eliyah

Vous devez redémarrer le processus si app.get ne fonctionne pas. Appuyez sur ctl+c puis sur restart node app. 

0
Ashwani Panwar

Je faisais face au même problème que mentionné dans la question. Les étapes suivantes ont résolu mon problème.

J'ai mis à jour le lien de package nodejs en procédant comme suit

  1. Effacer le cache de NPM:

    npm cache clean -f
    
  2. Installez un petit assistant appelé 'n'

    npm install -g n  
    

Ensuite, je suis allé sur le site Web de node.js, j'ai téléchargé le dernier package de noeud js, je l'ai installé et mon problème a été résolu.

0
Akshay Vijay Jain