2014-09-27 2 views
5

내가 upoad과 Node.js를 통해 서버로 이미지를 다운로드하려고 나는 아래의 코드를 사용하고 있습니다 : 내가 얻을 때오류 : ENOENT, 그런 파일이 없습니다 또는 디렉토리 노드 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에서 HTTP GET을 사용하여이 서버에서 이미지 요청이 충족되고 이미지가 받았다되지만 또한 아래의 오류가 발생합니다 :

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

것 같다 그것은 일부의 favicon.ico를 찾고있다. 무슨 문제가 될 수 있을까 ??

답변

7

당신은 파일이 fs.existsSync(path)로 존재하는 경우를 읽을하기 전에 확인해야합니다

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

참고로,이 될 수있는 좋은 습관은 다소 안티 패턴과 아닌 그냥를하는 것이 훨씬 낫다. 'fs.readFileSync()'에서 오류를 잡아서 다중 작업 세계에서 더 잘 작동하므로 ENOENT 오류를 안전하게 처리하십시오. 또한 코어 이벤트 처리시 동기식 파일 I/O를 사용하지 않는 것이 좋습니다. – jfriend00

+1

'exist'는 jfriend00이 언급 한 이유 때문에 심각하게 사용되지 않을 것이고 fs의 다른 버전에서는 작동하지 않을 것입니다. –

+0

Webpack 및 Node newbie 여기에 있습니다. 이것을 알아 내려고 2 일을 보냅니다. "존재"가 사용되지 않을 수 있으며 이는 나쁜 습관 일 수 있습니다. 그러나 내일 워크 플로 설정을 제공해야하며 실제로이 작업이 필요합니다. 고맙습니다. – Larrydx

관련 문제