2014-03-03 2 views
2

Я новичок в NodeJS и я # м пытается прочитать каталог рекурсивно это мой кодNodeJS фс Stats.isFile() не определен

var fs = require('fs'); 
var readDir = function (dir, calback) { 
fs.readdir(dir, function (err, files) { 
    if (err) 
     console.log(err); 

    for (var file in files) { 
     fs.stat(dir + "/" + file, function (err, stats) { 
      if (err) 
       console.log(err); 

      if (stats.isFile()) { 
       calback(dir + "/" + file); 
      } 
      if (stats.isDirectory()) { 
       walk(file, calback); 

      } 
     }); 
    } 
}); 
}; 

Это мой ErrorMessage

C:\Users\Lukas\Desktop\Enide-Studio-05-kepler-win32\ws\PlayerTest\hello-world-server.js:24 
      if (fs.stats.isFile()) { 
         ^
TypeError: Cannot call method 'isFile' of undefined 
    at C:\Users\Lukas\Desktop\Enide-Studio-05-kepler-win32\ws\PlayerTest\hello-world-server.js:24:30 
    at Object.oncomplete (fs.js:107:15) 

Какая у меня ошибка?

ответ

7

Вы не выходите из своей функции после возникновения ошибки.

fs.stat(dir + "/" + file, function (err, stats) { 
     if (err) { 
      console.log(err); 
      return; // exit here since stats will be undefined 
     } 

     if (stats.isFile()) { 
      calback(dir + "/" + file); 
     } 
     if (stats.isDirectory()) { 
      walk(file, calback); 

     } 
    }); 
+1

+1 для правильного ответа. Можно также написать 'return console.log()', так как возврат ничего функционально не эквивалентен 'return undefined', а результат console.log -' undefined'. Я бы также добавил, что некоторые считают хорошей практикой «возвращать обратный вызов (...)». Иногда это избавляет от необходимости блока else и т. Д. –

Смежные вопросы