Erreur: ENOENT, aucun fichier ou répertoire de Node JS
Je suis en train de upoad et de télécharger des images vers le serveur via Node.js et je suis en utilisant le code ci-dessous:
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');
});
Lorsque j'essaie d'obtenir de l'image à partir de ce serveur à l'aide de HTTP GET à http://localhost:8082/images/betty.jpg
, la demande est satisfaite et l'image est reçu, mais il jette aussi de l'erreur ci-dessous:
^
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)
Il semble qu'il est à la recherche du favicon.ico. Quel pourrait être le problème??
OriginalL'auteur writeToBhuwan | 2014-09-27
Vous devez vous connecter pour publier un commentaire.
Vous devez vérifier si le fichier existe avec
fs.existsSync(path)
avant de tenter de le lire:fs.readFileSync()
et gérer en toute sécurité une erreur ENOENT que cela fonctionne mieux dans un environnement multi-tâches monde. Également préférable de ne pas utiliser synchrone e/S de fichier dans votre coeur la gestion des événements.Attention,
exists
va sérieusement être déconseillé pour les raisons mentionnées par jfriend00 et ne fonctionne pas dans d'autres versions de fs.Webpack et Nœud de newbie. Passer 2 jours à essayer de comprendre cela. "existe" peut obtenir obsolète et cela peut être une mauvaise habitude, mais je dois fournir le flux de travail de configuration demain et j'ai vraiment besoin de cette. Je vous remercie.
OriginalL'auteur Dan D.