2016-03-07 17 views
10

To powinno być dość proste pytanie, na które mam nadzieję, ale to mnie zaskoczyło - może już dziś wpadam na zbyt dużo kodu!Węzeł - Sprawdź, czy istnieje katalog

Próbuję wykonać proste polecenie if, które sprawdza, czy istnieje folder. Jeśli folder nie istnieje, zrób go, jeśli tak, usuń zawartość.

Problem polega na tym, że jeśli katalog nie istnieje, to wywołanie zwrotne (statystyki) jest niezdefiniowane. Z fs.exist byłoby to dość proste, ale od czasu, gdy został wycofany, chciałem zapewnić, że jest to w przyszłości sprawdzone.

var seriesid = 5; 
     fs.stat("temp/" + seriesid, function (err, stats){ 
     if(!stats.isDirectory()){ 
      fs.mkdir("temp/" + seriesid); 
      console.log('Folder doesn\'t exist, so I made the folder ' + seriesid); 
      callback(); 
     } 
     else if (err != 'ENOENT') { 
      callback(err); 
     } 
     else { 
      // TODO: Folder exists, delete contents 
      console.log('Does exist'); 
      callback(); 
     } 
     }); 

Każda pomoc na temat sposobu osiągnięcia tego celu byłoby mile widziane

+0

Sprawdź swoją 'err' _first_. Jest bardzo prawdopodobne, że napotkasz błąd, jeśli 'stats' ma wartość' undefined'. – Oka

+0

1. Najpierw należy sprawdzić błędy. 2. Jeśli nie istnieje, statystyki nie są zdefiniowane. – baao

+0

Przepraszam, właśnie zdałem sobie sprawę, że po tym, jak trafiłem przesłać, więc oczywiście zredagowałem moje pytanie: – K20GH

Odpowiedz

27

Sprawdź err pierwszy. Następnie sprawdź isDirectory()

fs.stat("temp/" + seriesid, function (err, stats){ 
    if (err) { 
    // Directory doesn't exist or something. 
    console.log('Folder doesn\'t exist, so I made the folder ' + seriesid); 
    return fs.mkdir("temp/" + seriesid, callback); 
    } 
    if (!stats.isDirectory()) { 
    // This isn't a directory! 
    callback(new Error('temp is not a directory!')); 
    } else { 
    console.log('Does exist'); 
    callback(); 
    } 
}); 
+0

Ah! Ma doskonały sens. Dzięki – K20GH

+0

w przypadku, gdy nie chcesz zajmować się bezpośrednio z 'fs', https://www.npmjs.com/package/mkdirp – lasec0203

0

trzeba sprawdzić, czy istnieją statystyki przed robi! Stats.isDirectory()

+0

https://github.com/sindresorhus/del może być również używany – Kristoffer