【问题标题】:events.js:142 error in node.jsevents.js:node.js 中的 142 错误
【发布时间】:2016-01-26 19:28:09
【问题描述】:

我有一个文件,在 javascript 中,可以找到与参数匹配的所有目录。

我得到了这个错误:

我的代码:

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

        }
    });

(我的代码很乱,稍后我会清理它)

如何解决?

【问题讨论】:

  • 你能分享一些可能导致错误的相关代码吗?
  • 这意味着使用事件处理程序的东西抛出了错误。您必须分享导致问题的代码,以便我们提供帮助。但您似乎无权访问该文件。
  • 是的,请给我们看一些你的脚本代码。此错误没有帮助,而是“通用”错误
  • 您使用哪种 Windows?
  • @Chilipote windows 10

标签: javascript node.js frontend web-frontend


【解决方案1】:

为什么你不使用 Node 中的 fs 并递归查找目录?我认为错误应该在 findit 模块上......

看看https://nodejs.org/api/fs.html#fs_fs_readdir_path_callback 或试试同样可以做到的https://www.npmjs.com/package/recursive-readdir。我认为您从模块 findit 中使用的东西将在那里可用(例如忽略文件的方法)...

EDIT1:使用递归读取目录的示例:

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);
});

【讨论】:

  • 我以前使用 fs,我只想获取文件夹路径。没有里面的文件。
  • 因此尝试使用递归读取目录并使用示例中所述的忽略功能: function ignoreFunc(file, stats) { return !stats.isDirectory(); }
  • 该函数用作ignoreFunction,将确保您只获取文件夹。如果需要,您还可以在内部进行正则表达式测试(这意味着调用的结果,files 将是与该表达式匹配的文件夹数组)
  • 我读过它,但我很困惑..你能用忽略函数展示我的例子吗?
  • 查看带有示例的编辑。我还没有测试它,但它应该可以按您的预期工作。或者至少,如果您因为该统计数据而收到任何错误,您现在应该能够超越它,进行其他类型的验证......
【解决方案2】:

@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”。这将有助于找到您的错误

【讨论】:

  • 我得到了所有的目录,这是一个很长的列表。看不出问题出在哪里:\
  • 您能否将您终端上登录的最后一个目录的权限与“webstormproject\withcomverse”进行比较?因为我认为终端中显示的最后一个文件夹将是有问题的。我认为由于 findit,它会尝试在您没有权限的文件夹中读取。
  • @Moran,你发现了吗?
猜你喜欢
  • 2020-01-07
  • 1970-01-01
  • 1970-01-01
  • 2019-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多