Node.js – Dosya Islemleri

Önceki yazımda node.js ile neler yapabileceğize ve nodejs kütüphanesinin javascript için bize kattıklarına bakmıştık. Hatırlarsanız Node.js ile diğer sunucu tarafında çalışan dilleri bir birinden en çok ayıran kısım çalışma şekilleriydi. Örneğin Java’da soket açma işlemi bulunduğunuz thread’i bloke eden bir işlem olmasına karşın, node.js kullandığımızda threadlerimiz bloke olmuyordu. Herşeyi ama herşeyi “callback” fonksiyonlarıyla yapıyorduk. Fakat dosya kısmına geldiğimizde bu bizim için sorun yaratabilir. İşte bu yazımızda dosyaların asenkron ve senkron olarak nasıl okunabileceğine bakacağız.

Hazırlıknodejs_dosya_islemleri

Öncelikle Node.js çalıştırma ortamının kurulu olması gerekiyor. Kurulu olup olmadığını konsolunuzu açıp “node –version” komutu ile öğrenebilirsiniz. Burdan sonra size gereken sevdiğiniz bir editör ve ya IDE. Ben Javascript geliştirmelerim için Sublimetext kullanıyorum. Size önerimde bu yönde olacek. Hem node.js hem diğer Javascript, css geliştirmeleriniz için biçilmiş kaftan. Eğer daha önce hiç kullanmadıysanız ve nasıl kullanacağınızı öğrenmek istiyorsanız Tuts+ sitesindeki bu videoaları izleyebilirsiniz.

Şimdi projeniz olarak bir klasör yaratalım. Ben nodejs-dosya  ismini kullanacağım. Tüm javascript dosyalarımı ve okuyacağım dosyaları bu klasör içerisinde oluşturacağım. Yani scriptler içerisinde göreceğiniz “./” ön eki bu klasörü göstermektedir. Genel olarak okuyacağımız dosyayı yaratalım. Bu klasörün içerisinde db_config.json isminde bir dosya yaratıyoruz.

db_config.json

Okuma

Node.js te herşeyin “callback” fonksiyonları üzerinden yapıldığını biliyoruz. Bu durum dosya okumaları içinde geçerli.  Şimdi ilk dosya okuma işlemimiz için read-async.js isminde dosyamızı yaratıyoruz.

read-async.js

Burada öncelikle nodejs tarafından sağlanan FileSystem kütüphanesini kullanıyoruz. Hatta tüm örneklerde bu kütüphaneyi kullanacağız. Gördüğünüz gibi dosyayı okuyup ekrana basıyoruz.  Çalıştırmak için “node read-async.js” komutunu çalıştırıyoruz.

Daha önceleri Java gibi bir dilde çalıştyısanız herşeyi “callback” fonksiyonları ile halletmek size çok garip gelebilir. Aslına bakarsanız gariptirde. Şöyle düşünün, ayarlarınızın bulunduğu bir dosyayı okuyorsunuz. Örneğin veritabanı bağlantısı yapacaksınız ve ayarlarınızı okumanız gerekiyor. Eğer bulunduğunuz thread bu bilgiyi beklemezse, ayarlarınız okunmadan devam edecektir.

Tabi bunu Nodejs ekibide düşünmüş ve bizim için FileSystem kütüphanesine readFileSync fonksiyonunu eklemişler. Bunuda ayrı bir dosyada gerçekleyelim. Bu sefer read-sync.js isminde bir dosya yaratıyoruz.

read-sync.js

Burada beklediğimiz gibi öncelikle dosyamızın içeriği ekrana basılıyor ve ardından çalıştırma sonlanıyor.

Yazma

Dosyanın nasıl okunacağını gördükten sonra şimdi yazma işleminin nasıl yapılacağına bakalım. Tahmin edebileceğiniz gibi yazma işlemi de okuma işleminde oluduğu gibi hem senkron hem de asenkron olarak yapılabiliyor. İki yöntem de hemen hemen aynı bu sebepten ben sadece asenkron dosya yazmanın örneğini yapacağım.   Öncelikle write.js isminde JavaScript dosyası oluşturalım.

write.js

Asenkron çalıştığımız için yine bir “Callback function” veriyoruz. Bu fonksiyon yazma işlemi tamamlandığında tetiklenecektir. Örneğimizi her zamanki “node write.js ” komutu ile çalıştırabilirsiniz. Örneği çalıştırdığınızda beklenen konsol çıktınız aşağıdaki gibi olacaktır.

Write started
Write finished
Write completed

Izleme

Nodejs kütüphanesi bize dosyayı izleme olanağıda sağlıyor. Böylelikle üzerinde çalıştığımız dosyamız değişir değişmez haberimiz oluyor. Bu özelliği ayar dosyalarınızın değişimini yakalamak için kullanabilirsiniz. Bu örnektede ben db_config.json dosyasını kullanacağım. Öncelikle watch.js isminde bir Javascript dosyası yaratıyoruz.

watch.js

Burada “watchFile” fonksiyonuyla dosyanın değişikliklerinden haberdar olmak istiyoruz. Eğer dosyada bir değişiklik varsa dosyayı tekrar okuyoruz ve config nesnemizi ona göre güncelliyoruz. Yine “node watch.js” ile programımızı başlatabiliriz. Daha sonrasından dosyamızda değişiklik yapıp, güncellemeleri konsolumuzda görebiliriz.

Son

Son olarak şuna dikkatinizi çekmek istiyorum. Nodejs tamamen asenkron çalışacak şekilde tasarlanmış olsada ihtiyacınız olacağı durumlar için size Senkron çalışacak fonksiyonlarıda sağlamaktadır. Bu sebepten böyle bir ihtiyacınız olduğunda dokümantasyonuna gidip fonksiyonlarını incelemelisiniz.

Kaynaklar

End of Line