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.


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"


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

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.


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


-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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.