3 votes

L'application Node.js ne sert pas de page web statique sans chemin racine

Je suis en train d'écrire une application simple en node.js, pour une raison quelconque j'obtiens l'erreur " TypeError : path must be absolute or specify Root to res.sendFile "lorsque j'essaie d'afficher ma page html. Cette erreur ne devrait pas se produire car j'ai utilisé un middleware express qui spécifie le dossier où ce fichier peut être trouvé. Alors pourquoi ai-je ce problème ?

La structure de mon application est la suivante

MyApp
    public
        login.html
    app.js

Ma page html est servie dans app.js comme suit

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

app.use(express.static("public"));

app.get('/', function(req, res){
    res.sendFile("login.html");
});

app.listen(3000);

Je sais que pour contourner ce problème, je peux faire "res.sendFile(__dirname + '/public/login.html') ;" à la place mais je ne devrais pas avoir à le faire puisque j'utilise un middleware. Des idées ?

0voto

Ajoutez une fonction qui vous donne le chemin complet, appelons cette fonction $

var $=(file)=>`${__dirname}/public/${file}`;

Ensuite :

    res.sendFile($("login.html"));

Ainsi, vous n'aurez pas besoin d'inclure manuellement le chemin Root pour chaque sendFile appeler .

0voto

adeneo Points 135949

Cette ligne

app.use(express.static("public"));

ne fait pas ce que vous pensez qu'il fait !

C'est le cas pas définit le dossier par défaut pour chaque fonction Node, en fait il ne fait rien pour les autres fonctions Node.

Cela signifie simplement que si le serveur web reçoit une requête, il doit d'abord regarder dans ce dossier si un tel fichier existe, et si c'est le cas, il doit servir ce fichier.

Il s'agit donc d'une route pour les fichiers statiques, le plus souvent utilisée pour les fichiers CSS et JavaScript, et bien sûr tout autre fichier statique qui ne sert pas de contenu dynamique.

Toutefois, cette ligne

res.sendFile("login.html");

Recherche le fichier login.html dans le répertoire de travail actuel, ou en d'autres termes là où votre Node script s'exécute, cela n'a rien à voir avec la route statique, en fait la bonne façon d'obtenir ce fichier indépendamment de l'endroit où votre script s'exécute, c'est exactement de faire

res.sendFile(__dirname + '/public/login.html');

car il s'agit du chemin d'accès correct, qui est nécessaire pour les sendFile pour trouver le fichier.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X