2014-09-27 18 views
5

Ben upoad ve node.js aracılığıyla sunucuya görüntüleri indirmek için çalışıyorum ve aşağıdaki kodu kullanıyorum: Ben almaya çalıştığımdaHata: ENOENT, böyle bir dosya ya da dizin Düğüm JS

var http = require('http'), 
    path = require('path'), 
    os = require('os'), 
    fs= require('fs'),url = require('url'); 

var Busboy = require('busboy'); 

http.createServer(function(req, res) { 
    if (req.method === 'POST') { 
    var busboy = new Busboy({ headers: req.headers }); 
    busboy.on('file', function(fieldname, file, filename, encoding, mimetype) { 
     var saveTo = ".\\Images\\"+filename; 
     file.pipe(fs.createWriteStream(saveTo)); 
    }); 
    busboy.on('finish', function() { 
     res.writeHead(200, { 'Connection': 'close' }); 
     res.end("That's all folks!"); 
    }); 
    return req.pipe(busboy); 
    } 
else{ 
    var request = url.parse(req.url, true); 
    console.log(request); 
    var action = request.pathname; 
    console.log(action); 
    if (action !== '/') { 
     var img = fs.readFileSync('.'+action); 
     res.writeHead(200, {'Content-Type': 'image/gif' }); 
     res.end(img, 'binary'); 
    } else { 
     res.writeHead(200, {'Content-Type': 'text/plain' }); 
     res.end('Hello World \n'); 
    } 
    } 
    res.writeHead(404); 
    res.end(); 
}).listen(8082, function() { 
    console.log('Listening for requests'); 
}); 

http://localhost:8082/images/betty.jpg de HTTP GET kullanarak bu sunucudan görüntü, istek yerine getirilir ve görüntü alınan bir hatadır ama aynı zamanda aşağıdaki hatayı atar:

  ^
fs.js:438 
    return binding.open(pathModule._makeLong(path), stringToFlags(flags), mode); 
       ^
Error: ENOENT, no such file or directory 'D:\ImageUploadService\favicon.ico' 
    at Object.fs.openSync (fs.js:438:18) 
    at Object.fs.readFileSync (fs.js:289:15) 
    at Server.<anonymous> (D:\ImageUploadService\service.js:27:20) 
    at Server.emit (events.js:98:17) 
    at HTTPParser.parser.onIncoming (http.js:2112:12) 
    at HTTPParser.parserOnHeadersComplete [as onHeadersComplete] (http.js:121:23 
) 
    at Socket.socket.ondata (http.js:1970:22) 
    at TCP.onread (net.js:527:27) 'D:\ImageUploadService\favicon.ico' 
    at Object.fs.openSync (fs.js:438:18) 
    at Object.fs.readFileSync (fs.js:289:15) 
    at Server.<anonymous> (D:\ImageUploadService\service.js:27:20) 
    at Server.emit (events.js:98:17) 
    at HTTPParser.parser.onIncoming (http.js:2112:12) 
    at HTTPParser.parserOnHeadersComplete [as onHeadersComplete] (http.js:121:23 
) 
    at Socket.socket.ondata (http.js:1970:22) 
    at TCP.onread (net.js:527:27) 

görünüyor bazı favicon.ico aradığı. Sorun ne olabilir?

cevap

7

dosya fs.existsSync(path) ile varsa okumak denemeden önce kontrol etmek gerekir:

if (action !== '/' && fs.existsSync('.'+action)) { 
    var img = fs.readFileSync('.'+action); 
    res.writeHead(200, {'Content-Type': 'image/gif' }); 
    res.end(img, 'binary'); 
} else { 
+5

Bilginize, bu olmak için iyi bir alışkanlık biraz bir anti-desen ve değil sadece çok daha iyidir. "fs.readFileSync()" üzerindeki hatayı yakalayın ve çok görevli bir dünyada daha iyi çalıştığından ENOENT hatasını güvenli bir şekilde ele alın. Ayrıca, çekirdek olay işleminizde eşzamanlı dosya G/Ç kullanmamanız da daha iyidir. – jfriend00

+1

Dikkatli olun, 'var 'jfriend00 tarafından belirtilen nedenlerden dolayı ciddi bir şekilde kullanımdan kaldırılacak ve fs'in daha sonraki sürümlerinde çalışmayacaktır. Burada –

+0

Webpack ve Düğüm newbie. Bunu anlamaya çalışırken 2 gün geçirin. "var", kullanımdan kaldırılmış olabilir ve bu kötü bir alışkanlık olabilir, ancak iş akışı kurulumunu yarına teslim etmem gerekiyor ve buna gerçekten ihtiyacım vardı. Teşekkür ederim. – Larrydx

İlgili konular