SORU
4 Aralık 2012, Salı


Node.js klasör veya kullanmak mevcut oluşturun

Ben zaten Node.js ve eğer bir şey kaçırdıysam, parametreleri belirli işlemleri içeren ne söylemez sürece, özellikle fs.mkdir() belgeleri okudum. Belgelerinde gördüğünüz gibi, çok fazla değil.

Şu anda, bir klasör oluşturun ya da mevcut bir yerine kullanmaya çalışır bu kod var:

fs.mkdir(path,function(e){
    if(!e || (e && e.code === 'EEXIST')){
        //do something with contents
    } else {
        //debug
        console.log(e);
    }
});

Ama bunu doğru şekilde yapmak olduğunu merak ediyorum? Kodu kontrol EEXIST doğru yolu klasörü zaten var olduğunu bilmek? Dizin yapmadan önce fs.stat() yapabileceğimi biliyorum, ama o zaten dosya sistemi için iki isabet olurdu.

İkinci olarak, hata nesneleri içerir ne gibi ayrıntıları içeren Node.js tam ya da en azından daha ayrıntılı bir belge yok, ne parametreleri vb anlamına gelir.

CEVAP
19 HAZİRAN 2014, PERŞEMBE


try {} catch {}, Bu çok nazikçe bir yarış durumu karşılaşmadan elde edebilirsiniz kullanarak:

Hataya dayanıklı fs.mkdirSync(path)

var mkdirSync = function (path) {
  try {
    fs.mkdirSync(path);
  } catch(e) {
    if ( e.code != 'EEXIST' ) throw e;
  }
}

Açıklama

Fonksiyonun her iki versiyonda da Düğüm dizini oluşturmaya çalışır ve eğer bir istisna bunu yaparken karşılaşırsa, bir özel durum oluşturur. catch {} yan, biz eğer hata kodu ise eğer hiçbir şey olmamış gibi komut dosyası yürütülmesine devam dizinin var demektir EEXIST,. Eğer hata kodu, bir hata atmalıyız olsa bile EEXIST değil, muhtemelen EACCES gibi dosya sisteminin bir durum ile karşı karşıyayız çünkü (izin verilmedi).

Örnekler

Hadi dizinleri ./first/second/third ./first/second/fourth belirli oluşturun:

var fs    = require('fs')
  , path  = require('path');

var mkdirSync = function (path) {
  try {
    fs.mkdirSync(path);
  } catch(e) {
    if ( e.code != 'EEXIST' ) throw e;
  }
}

Yöntem 1: Doğrusal

mkdirSync( path.join('first') );
mkdirSync( path.join('first', 'second') );
mkdirSync( path.join('first', 'second', 'third') );
mkdirSync( path.join('first', 'second') ); // Just to demonstrate fault tolerance
mkdirSync( path.join('first', 'second', 'fourth') );

Yöntem 2: mkdir -p-mesela özyineleme

var mkdirpSync = function (dirpath) {
  var parts = dirpath.split(path.sep);
  for( var i = 1; i <= parts.length; i   ) {
    mkdirSync( path.join.apply(null, parts.slice(0, i)) );
  }
}

mkdirpSync('first/second/third');
mkdirpSync('first/second/fourth');

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • bcbauer

    bcbauer

    7 ŞUBAT 2007
  • ecf150king

    ecf150king

    20 Ocak 2006
  • jocc talking shit

    jocc talking

    6 NİSAN 2007