Düğüm JS Hatası: ENOENT


87

İle birlikte takip ediyorum: Düğüm Başlangıç ​​Kitabı

Başka bir SO gönderisindeki kodla test ettikten sonra:

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

Hata devam ediyor:

Hata: ENOENT, böyle bir dosya veya 'tmp' dizini yok

uygulama dizin yapısı

Tmp üzerindeki izinler 777'dir.

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

Biraz şaşkın, her yardım takdir edildi.


1
senin process.cwd()ne
fentlik

3
çözümü burada buldu: stackoverflow.com/questions/7681407/… . Bu forumu seviyorum!
Wasabi

Yanıtlar:


90

"/tmp/test.jpg"doğru yol değildir - bu yol /, kök dizinle başlar .

Unix'te, mevcut dizinin kısayolu .

Bunu dene "./tmp/test.jpg"


5
Bunu tam olarak doğru açıklıyor. /tmpfarklıdır ./tmp. /tmpgeçerli dizinde değil, kök dizinde.
3ocene

18

Hatanın neden oluştuğunu biraz genişletmek gerekirse: Bir yolun başlangıcındaki eğik çizgi "dosya sisteminin kökünden başlamak ve verilen yolu aramak" anlamına gelir. Eğik çizgi yok "geçerli çalışma dizininden başlayın ve verilen yolu arayın" anlamına gelir.

Yol

/tmp/test.jpg

bu nedenle , webapp klasörü yerine dosya sisteminin kökündeki tmp klasöründeki test.jpg dosyasının aranması anlamına gelir (örn. pencerelerde c: \, / on * nix) . Yolun önüne nokta (.) Eklemek bunu açıkça "geçerli çalışma dizininden başla" olarak değiştirir, ancak temelde eğik çizgiyi tamamen dışarıda bırakmakla aynıdır.

./tmp/test.jpg = tmp/test.jpg

8

tmp klasörünüz kodunuzun çalıştığı dizine bağlıysa /önündeki dosyayı kaldırın /tmp.

Yani sadece tmp/test.jpgkodunuzda var. Bu benim için benzer bir durumda çalıştı.


0

Şablonunuza farklı bir dizinden gelen farklı bir jade dosyası ekleyebilirsiniz.

views/
     layout.jade
static/
     page.jade

Düzen dosyasını views dizininden static / page.jade'ye eklemek için

page.jade

extends ../views/layout


-7

"tmp" yerine "temp" kullanın

"/temp/test.png"

tmp'nin bilgisayarımda bulunmayan geçici bir klasör olduğunu anladıktan sonra benim için çalıştı, ancak geçici klasörümdü

///

DÜZENLE:

Ayrıca C: sürücümde yeni bir "tmp" klasörü oluşturdum ve her şey mükemmel çalıştı. Kitap bu küçük adımdan bahsetmeyi kaçırmış olabilir

node.js topluluğundan bazılarıyla sohbet etmek için http://webchat.freenode.net/?channels=node.js sayfasına bakın

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.