2016-01-26 3 views
2

У меня есть файл в javascript, который находит все каталоги, соответствующие этому параметру.events.js: 142 error in node.js

И я получил эту ошибку:

enter image description here

моего код:

function getUserHome() { 
     return process.env[(process.platform == 'win32') ? 'USERPROFILE' : 'HOME']; 
    } 

var home_path=getUserHome(); 

var findit = require('findit'), 
    path = require('path'), 
    finder = findit(path.resolve(home_path)); 
    var myArgs = process.argv.slice(2)[0]; 
    var filter1 = new RegExp(myArgs); 

    //This listens for directories found 
    finder.on('directory', function (dir) { 
     var directories = dir.split('\\'); 
     var last= directories[directories.length-1].toLowerCase(); 

     if(filter1.test(last)){ 
      console.log('Directory: ' + dir); 

     } 
    }); 

(Мой код является беспорядком, я уберу его позже)

Как исправить ?

+1

Можете ли вы поделиться соответствующий код что может вызвать ошибку? –

+1

Это означает, что что-то, использующее обработчик событий, забросило ошибку. Вы должны будете поделиться кодом, вызывающим проблему для нас, чтобы помочь. Но похоже, что у вас нет разрешения на доступ к этому файлу. –

+0

Да, пожалуйста, покажите нам код вашего сценария. Эта ошибка недостаточно полезна, но «общий» – Chilipote

ответ

0

@Moran, можете ли вы добавить console.log непосредственно в обратном вызове из вашего каталога?

finder.on('directory', function (dir) { 
     // Here 
     console.log(dir); 

     var directories = dir.split('\\'); 
     var last= directories[directories.length-1].toLowerCase(); 

     if(filter1.test(last)){ 
      console.log('Directory: ' + dir); 

     } 
    }); 

Чтобы узнать, что представляет собой проблема? Затем сравните права, применяемые к этой папке, и каталог, который работает, например, «comverse». Это поможет найти вашу ошибку

+0

Я получаю все каталоги, это длинный список. не вижу, где проблема: \ – Moran

+0

Можете ли вы сравнить права последнего каталога, записанного в вашем терминале, например, с помощью «webstormproject \ withcomverse»? Потому что я думаю, что последнее отображение папки в вашем терминале будет проблематичным. Я думаю, что из-за findit он пытается читать внутри папки, в которой у вас нет прав. – Chilipote

+0

@Moran, вы узнали? – Chilipote

2

Почему вы не пользователь fs от узла, и ищете dirs рекурсивно? Я думаю, что ошибка должна быть на модуле findit ...

Что посмотреть на https://nodejs.org/api/fs.html#fs_fs_readdir_path_callback или попробуйте вместо этого https://www.npmjs.com/package/recursive-readdir, который также делает это. Я думаю, что вещи, которые вы используете из модуля FINDit, будут доступны там (например, способы игнорировать файлы) ...

EDIT1: Пример использования рекурсивного-READDIR:

var recursive = require('recursive-readdir'); 

var filter1 = new RegExp(myArgs); 
function ignoreFunc(file, stats) { 
    return !(stats.isDirectory() && filter1.test(path.basename(file))); 
} 

recursive('directory', [ignoreFunc] ,function (err, files) { 
    // Files is an array of filename (only the ones that matched the condition) 
    console.log(files); 
}); 
+0

Я использую fs раньше, я хочу получить только путь к папкам. без файлов внутри. – Moran

+0

Итак, попробуйте рекурсивно-readdir и используйте функцию игнорирования, как указано в их примере: function ignoreFunc (файл, статистика) { return! Stats.isDirectory(); } – anolsi

+0

Эта функция используется как 'ignoreFunction', гарантирует, что вы получите только папки. И вы также можете выполнить тест регулярного выражения внутри, если хотите (что означает, что результат вызова, 'files' будет массивом папок, соответствующих этому выражению) – anolsi