Best Studio 1
Best Studio
mannaxxx 1
mannaxxx
Agora Metin2 1
Agora Metin2
[DEV]AB 1
[DEV]AB
Sevdamsın 1
Sevdamsın
TuZaKK 1
TuZaKK
kaptanmikro1 1
kaptanmikro1
farkmt2official 2
farkmt2official
kralhakan2009 1
kralhakan2009
Vahsi Uzman 1
Vahsi Uzman
Bvural41 1
Bvural41
Hikaye Ekle

[NODE JS] fs.mkdir ile Klasör Oluşturma

Türkiye'de ilk Mobil & PC Aynı Anda Metin2 Oyna. Triarchonline kalıcı ve uzun ömürlü yapısı ile 24 Temmuz'da açılıyor. | 1-99 Mobil Metin2 Triarch HEMEN TIKLA!

nodejs.png


[NODE JS] fs.mkdir ile Klasör Oluşturma​


Selam arkadaşlar. Dosya işlemlerinin yanında klasör işlemleri de çok önemli. fs.mkdir ile programatik olarak klasör oluşturmak Node.js projelerinde sık yapılan bir işlem. Upload klasörleri, log dizinleri, geçici çalışma alanları, çıktı klasörleri gibi birçok senaryo var. Ben her projede ilk başlangıçta gerekli klasörlerin otomatik oluşturulmasını sağlıyorum.

mkdir Kullanımı​


fs.mkdir tek seviye klasör oluşturur. Eğer üst klasör yoksa hata verir. Ama recursive: true seçeneği ile iç içe klasörleri tek seferde oluşturabilirsiniz. Bu özellik çok kullanışlı ve olmadan hayat zor. Eskiden mkdirp gibi üçüncü parti paketler kullanılıyordu, artık Node.js bunu dahili olarak destekliyor.

Tecrübeme göre klasör oluşturma işleminde en önemli kural: oluşturmadan önce varlığını kontrol edin veya recursive: true kullanın. Zaten var olan bir klasörü oluşturmaya çalışmak EEXIST hatası verir. recursive: true kullanırsanız klasör zaten varsa hata vermez, sessizce geçer.

JavaScript:
// === fs.mkdir ile KLASÖR OLUŞTURMA ===

const fs = require('fs');
const path = require('path');

const testDir = __dirname;

// 1. Tek klasör oluşturma
console.log('=== Senkron mkdir ===');
const tekKlasor = path.join(testDir, 'tek-klasor');
try {
    fs.mkdirSync(tekKlasor);
    console.log('tek-klasor oluşturuldu');
    fs.rmdirSync(tekKlasor);
} catch (hata) {
    if (hata.code === 'EEXIST') {
        console.log('Klasör zaten var');
    } else {
        console.error('Hata:', hata.message);
    }
}

// 2. Recursive (iç içe) klasör oluşturma
console.log('\n=== Recursive mkdir ===');
const icIceKlasor = path.join(testDir, 'seviye1', 'seviye2', 'seviye3');
try {
    fs.mkdirSync(icIceKlasor, { recursive: true });
    console.log('İç içe klasörler oluşturuldu:', icIceKlasor);
    fs.rmSync(path.join(testDir, 'seviye1'), { recursive: true });
} catch (hata) {
    console.error('Hata:', hata.message);
}

// 3. Asenkron mkdir - Promise
async function klasorOlustur(yol) {
    try {
        await fs.promises.mkdir(yol, { recursive: true });
        console.log(`Oluşturuldu: ${yol}`);
        return true;
    } catch (hata) {
        console.error(`Oluşturulamadı: ${hata.message}`);
        return false;
    }
}

// 4. Proje yapısı oluşturma
async function projeYapisiOlustur(projeAdi) {
    const temel = path.join(testDir, projeAdi);

    const klasorler = [
        'src/controllers',
        'src/models',
        'src/routes',
        'src/middlewares',
        'src/services',
        'src/utils',
        'src/config',
        'tests/unit',
        'tests/integration',
        'public/css',
        'public/js',
        'public/images',
        'uploads/temp',
        'uploads/avatars',
        'logs'
    ];

    console.log(`\n${projeAdi} proje yapısı oluşturuluyor...`);

    for (const klasor of klasorler) {
        const tam = path.join(temel, klasor);
        await fs.promises.mkdir(tam, { recursive: true });
        console.log(`  /${klasor}/`);
    }

    console.log(`\n${klasorler.length} klasör oluşturuldu`);

    // Temizlik
    fs.rmSync(temel, { recursive: true, force: true });
    return temel;
}

projeYapisiOlustur('test-proje');

// 5. Tarih bazlı klasör oluşturma (log/upload için)
function tarihKlasoruOlustur(temelDizin) {
    const simdi = new Date();
    const yil = simdi.getFullYear();
    const ay = String(simdi.getMonth() + 1).padStart(2, '0');
    const gun = String(simdi.getDate()).padStart(2, '0');

    const klasorYolu = path.join(temelDizin, String(yil), ay, gun);
    fs.mkdirSync(klasorYolu, { recursive: true });

    return klasorYolu;
}

const uploadKlasoru = tarihKlasoruOlustur(path.join(testDir, 'uploads'));
console.log('\nUpload klasörü:', uploadKlasoru);
fs.rmSync(path.join(testDir, 'uploads'), { recursive: true, force: true });

// 6. Güvenli klasör oluşturma fonksiyonu
function guvenliMkdir(yol, izinler = 0o755) {
    if (!fs.existsSync(yol)) {
        fs.mkdirSync(yol, { recursive: true, mode: izinler });
        return { olusturuldu: true, yol };
    }
    return { olusturuldu: false, yol, mesaj: 'Zaten mevcut' };
}

// 7. Geçici çalışma dizini oluşturma
async function geciciDizinOlustur(prefix = 'tmp') {
    const gecici = await fs.promises.mkdtemp(
        path.join(require('os').tmpdir(), `${prefix}-`)
    );
    console.log('\nGeçici dizin:', gecici);
    return gecici;
}
geciciDizinOlustur('node-test');

Klasör oluşturma basit bir işlem ama doğru yapmak önemli. Recursive seçeneğini kullanın, varlık kontrolü yapın ve proje başlangıcında gerekli klasörleri otomatik oluşturun. Bu sayede "klasör bulunamadı" hatalarından kurtulursunuz. Kolay gelsin.
 

Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)

Geri
Üst