Knoten JS-Fehler: ENOENT

87

Ich folge zusammen mit: The Node Beginner Book

Nach dem Testen mit dem Code aus einem anderen SO-Beitrag:

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

Der Fehler bleibt bestehen:

Fehler: ENOENT, keine solche Datei oder kein solches Verzeichnis 'tmp'

App-Verzeichnis-Struktur

Die Berechtigungen für tmp sind 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);

Ein wenig ratlos, jede Hilfe geschätzt.

Wasabi
quelle
1
Was ist Ihr process.cwd()?
Fent
3
Die Lösung finden Sie hier: stackoverflow.com/questions/7681407/… . Ich liebe dieses Forum!
Wasabi

Antworten:

89

"/tmp/test.jpg"ist nicht der richtige Pfad - dieser Pfad beginnt mit /dem Stammverzeichnis.

Unter Unix lautet die Verknüpfung zum aktuellen Verzeichnis .

Versuche dies "./tmp/test.jpg"

ihciad
quelle
5
Er erklärt es genau richtig. /tmpist anders als ./tmp. /tmpbefindet sich nicht im aktuellen Verzeichnis, sondern im Stammverzeichnis.
3ozän
18

Um ein wenig zu erläutern, warum der Fehler aufgetreten ist: Ein Schrägstrich am Anfang eines Pfads bedeutet "Beginnen Sie am Stammverzeichnis des Dateisystems und suchen Sie nach dem angegebenen Pfad". Kein Schrägstrich bedeutet "Beginnen Sie mit dem aktuellen Arbeitsverzeichnis und suchen Sie nach dem angegebenen Pfad".

Der Weg

/tmp/test.jpg

Dies bedeutet, dass die Datei test.jpg im Ordner tmp im Stammverzeichnis des Dateisystems (z. B. c: \ unter Windows, / unter * nix) anstelle des Ordners webapp gesucht wird . Das Hinzufügen eines Punkts (.) Vor dem Pfad ändert dies explizit in "Start aus dem aktuellen Arbeitsverzeichnis", entspricht jedoch im Wesentlichen dem vollständigen Weglassen des Schrägstrichs.

./tmp/test.jpg = tmp/test.jpg
Jens Wegar
quelle
8

Wenn sich Ihr tmp-Ordner relativ zu dem Verzeichnis befindet, in dem Ihr Code ausgeführt wird, entfernen Sie das /vor /tmp.

Sie haben also nur tmp/test.jpgIhren Code. Das hat bei mir in einer ähnlichen Situation funktioniert.

Dave Howell
quelle
0

Sie können Ihrer Vorlage eine andere Jadedatei hinzufügen, die aus einem anderen Verzeichnis stammt

views/
     layout.jade
static/
     page.jade

So fügen Sie die Layoutdatei aus dem Ansichtsverzeichnis in static / page.jade ein

page.jade

extends ../views/layout
Bastin Robin
quelle
0

Veränderung

"/tmp/test.jpg".

zu

"./tmp/test.jpg"
Adeojo Emmanuel IMM
quelle
-6

Verwenden Sie "temp" anstelle von "tmp".

"/temp/test.png"

Es funktionierte für mich, nachdem mir klar wurde, dass tmp ein temporärer Ordner ist, der auf meinem Computer nicht vorhanden war, aber mein temporärer Ordner war mein temporärer Ordner

///

BEARBEITEN:

Ich habe auch einen neuen Ordner "tmp" in meinem Laufwerk C: erstellt und alles hat perfekt funktioniert. Das Buch hat es möglicherweise versäumt, diesen kleinen Schritt zu erwähnen

Besuchen Sie http://webchat.freenode.net/?channels=node.js, um mit einigen Mitgliedern der node.js-Community zu chatten

sQuijeW
quelle