fs.watch调用方法什么时候不应该?

时间:2018-03-01 16:05:32

标签: javascript node.js

我对node.js和javascript也很陌生,而且我一直在使用下面的代码遇到错误。

fs.watch('F:/junk', (eventType, filename) => {
    if(filename && filename.split('.')[1].match("zip")) {
        try {
            var zip = new azip(dir + filename);
        } catch(err) { return console.log(err); }
        try {
            zip.extractAllTo(dir + filename.split('.')[0], false);
        } catch(err) { return console.log(err); }
    }
});

和错误。该错误仅在成功运行extractAllTo(adm-zip)后发生,并且如果我将该位用完则不会发生。

if(filename && filename.split('.')[1].match("zip")) {
TypeError: Cannot read property 'match' of undefined

我每次都使用相同的文件进行测试,名称为dummyfile.zip

我可以在第一个语句中创建另一个if语句,它会正常工作,但这样做似乎有点多余

1 个答案:

答案 0 :(得分:0)

您必须测试数组元素2(或索引1)的存在。原因很多。在不知道操作系统和文件结构的情况下,无法告诉您。例如,fs.watch()将直接返回 - 如果目录没有'。',则失败。如果文件没有扩展名,则相同。

要验证这一点,请在控制台中执行以下操作:

let str = "directory name";
str.split('.');
str.split('.')[1].match('test');

查看输出。

<强>考虑

if(filename && filename.includes('.zip')) {
      // work
   }
}

代码有点冗长,但会避免由没有扩展名的目录和文件以及带有前导点的文件等引起的错误。