Erreur JS du nœud: ENOENT

87

Je suis avec: The Node Beginner Book

Après avoir testé avec le code d'un autre article SO:

var Fs = require('fs');

var dirs = ['tmp'];
var index;
var stats;

for (index = 0; index < dirs.length; ++index)
{
    try
    {
        stats = Fs.lstatSync(dirs[index]);
        console.log(dirs[index] + ": is a directory? " + stats.isDirectory());
    }
    catch (e)
    {
        console.log(dirs[index] + ": " + e);
    }
}

L'erreur persiste:

Erreur: ENOENT, aucun fichier ou répertoire 'tmp'

structure du répertoire d'application

Les permissions sur tmp sont 777.

requestHandlers.js

var querystring = require("querystring"),
    fs = require("fs");

function start(response, postData) {
  console.log("Request handler 'start' was called.");

  var body = '<html>'+
    '<head>'+
    '<meta http-equiv="Content-Type" '+
    'content="text/html; charset=UTF-8" />'+
    '<style>input{display: block; margin: 1em 0;}</style>'+
    '</head>'+
    '<body>'+
    '<form action="/upload" method="post">'+
    '<textarea name="text" rows="20" cols="60"></textarea>'+
    '<input type="submit" value="Submit text" />'+
    '</form>'+
    '</body>'+
    '</html>';

    response.writeHead(200, {"Content-Type": "text/html"});
    response.write(body);
    response.end();
}

function upload(response, postData) {
  console.log("Request handler 'upload' was called.");
  response.writeHead(200, {"Content-Type": "text/plain"});
  response.write("You've sent the text: "+
  querystring.parse(postData).text);
  response.end();
}

function show(response, postData) {
  console.log("Request handler 'show' was called.");
  fs.readFile("/tmp/test.jpg", "binary", function(error, file) {
    if(error) {
      response.writeHead(500, {"Content-Type": "text/plain"});
      response.write(error + "\n");
      response.end();
    } else {
      response.writeHead(200, {"Content-Type": "image/jpg"});
      response.write(file, "binary");
      response.end();
    }
  });
}

exports.start = start;
exports.upload = upload;
exports.show = show;

Index.js

var server = require("./server");
var router = require("./router");
var requestHandlers = require("./requestHandlers");

var handle = {}
handle["/"] = requestHandlers.start;
handle["/start"] = requestHandlers.start;
handle["/upload"] = requestHandlers.upload;
handle["/show"] = requestHandlers.show;

server.start(router.route, handle);

Un peu perplexe, toute aide appréciée.

Wasabi
la source
1
quel est votre process.cwd()?
fent le
3
trouvé la solution ici: stackoverflow.com/questions/7681407/… . J'adore ce forum!
Wasabi

Réponses:

90

"/tmp/test.jpg"n'est pas le chemin correct - ce chemin commence par /le répertoire racine.

Sous unix, le raccourci vers le répertoire courant est .

Essaye ça "./tmp/test.jpg"

ihciad
la source
5
Il l'explique exactement. /tmpest différent de ./tmp. /tmpn'est pas dans le répertoire courant, c'est dans le répertoire racine.
3ocène
18

Pour expliquer un peu pourquoi l'erreur s'est produite: Une barre oblique au début d'un chemin signifie "partir de la racine du système de fichiers et chercher le chemin donné". Aucune barre oblique ne signifie "commencer à partir du répertoire de travail actuel et rechercher le chemin donné".

Le chemin

/tmp/test.jpg

se traduit donc par la recherche du fichier test.jpg dans le dossier tmp à la racine du système de fichiers (par exemple c: \ sous windows, / sur * nix), au lieu du dossier webapp . Ajouter un point (.) Devant le chemin change explicitement cela pour lire "démarrer à partir du répertoire de travail courant", mais revient fondamentalement à laisser complètement la barre oblique.

./tmp/test.jpg = tmp/test.jpg
Jens Wegar
la source
8

si votre dossier tmp est relatif au répertoire dans lequel votre code s'exécute, supprimez le /devant /tmp.

Donc, vous avez juste tmp/test.jpgdans votre code. Cela a fonctionné pour moi dans une situation similaire.

Dave Howell
la source
0

Vous pouvez inclure un fichier jade différent dans votre modèle, celui d'un autre répertoire

views/
     layout.jade
static/
     page.jade

Pour inclure le fichier de mise en page des vues dir vers static / page.jade

page.jade

extends ../views/layout
Bastin Robin
la source
0

changement

"/tmp/test.jpg".

à

"./tmp/test.jpg"
Adeojo Emmanuel IMM
la source
-6

utilisez "temp" au lieu de "tmp"

"/temp/test.png"

cela a fonctionné pour moi après avoir réalisé que le tmp est un dossier temporaire qui n'existait pas sur mon ordinateur, mais ma temp était mon dossier temporaire

///

ÉDITER:

J'ai également créé un nouveau dossier "tmp" dans mon lecteur C: et tout fonctionnait parfaitement. Le livre a peut-être manqué de mentionner ce petit pas

consultez http://webchat.freenode.net/?channels=node.js pour discuter avec une partie de la communauté node.js

sQuijeW
la source