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

问题描述 投票:0回答:1

我对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语句,它可以正常工作,但这样做似乎有点多余

javascript node.js
1个回答
0
投票

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

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

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

查看输出。

考虑

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

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

© www.soinside.com 2019 - 2024. All rights reserved.