Meteor.js Serisi : [Ara yazı – 3 ] Publish / Subscribe, Autopublish, Meteor Methods ve diğer bazı önemli konular

Bir önceki yazımızda bıraktığımız yeri düşünürsek, genel olarak bundan önceki iki yazıda bashettiğimiz konulardan daha önemli olan ve olabildiğince iyi anlaşılması gereken bir kaç önemli başlığımız kaldı.

Bu yazımızda, ara yazı serimizin sonucusu olarak, aşağıdaki başlıklara bakarak devam edelim ;

  1. Publish / Subscribe ve Autopublish – Dağıtımlar / Abonelikler ve Otomatik dağıtım
  2. Insecure paketi ve Meteor Methods
  3. Collections with schemas / Koleksiyonlarımızın şemalarla kullanılması
  4. Diğer Başlıklar.

Publish / Subscribe ve Autopublish – Dağıtımlar / Abonelikler ve Otomatik dağıtım

Uygulamamızın şimdiye dek olan kısmına bakacak olursak uygulamamızda her hangi bir yerde aşağıdaki gibi bir kullanım yaptığımızda;

Urunler.find({})

(Meteor Collection Sorguları) meteor otomatik olarak bize Urunler koleksiyondaki verileri döndürmekteydi. Aslında biz fark etmesekte, meteor bizim için arka planda, kullandığımız her Collection( Urunler koleksiyonu gibi) için otomatik olarak bir publication /dağıtım kanalı oluşturmakta. Ayrıca, İstemci tarafında da bu dağıtıma abonelik başlatmakta(Subscriptions).

Bu durum işimizi kolaylaştırsada, hem performans hemde güvenlik açısından bu otomatik yapıyı kaldırıp, Koleksiyonlarımızı, istemcilere kontrollü bir şekilde sunmak zorundayız.  Meteor veri dağıtım modeli olarak, Publish/Subscribe olarak bildiğimiz modeli kullanmakta. Kısacası, İstemci bir veriye erişebilmek için yada sunucuya veri gönderebilmek için sunucu tarafında oluşan “Publising” kanallarına abone olmak zorunda diyebiliriz.

Bu yöntem ile hem , istemci sadece kendi ihtiyacı olan   veriler için ilgili kanallara abone olabilecek hemde sunucu bu model üzerinden istemcilere gönderdiği veriyi kontrol altına alabilecektir.Şimdi daha iyi anlayabilmek için örneğimize bakarak devam edelim. İlk iki yazıdan beri yazdığımız uygulamanin ana dizinindeyken asagidaki komutla `AutoPublish` paketini kaldiralim;

meteor remove autopublish

autopublish paketini kaldırdıktan sonra uygulamamızı çalıştırıp bakalım, aşağıda da görebileceğiniz gibi, artık hiç bir ürünümüz listelenmemekte.

autopublish

Şimdi, verilerimizi istemcilere göndermek için ilk olarak ilgili publication  ı oluşturarak devam edelim. uygulamamızda server klasörü altında, publication.js isimli bir dosya oluşturalım ve dağıtım tamımlamalarımızı bu dosya içinde yapalım.

server/publication.js

import {Urunler} from '../collections/Urunler'

Meteor.publish('urunlerPub', function urunlerPublication() {
    return Urunler.find();
});

Yukarıda tanımladığımız ilk publication ile “urunlerPub” isimli bir kanal oluşturmuş olduk. “urunlerPub” şeklind eisimlendirmem sadece daha kolay anlaşılması için. Publication ı oluşturmak için, Meteor.publish() metodunu kullandık. Bu metod , ilk parametre olarak bir isim “urunlerPub”  , ikinci parametre olarak da bir fonksiyon almakta. Bu fonksiyonumuz içinde hangi veriyi ne şartlarla hangi istemcilere göndereceğimizi tanımlayacağız. Şuan itibariyle, hiç bir kontrol yada modifikasyon yapmadan (yetkilendirme,sıralama, limitleme vs) ürünlerimizi bu kanal altından dağıtıma açtık.

Yukarıdaki dosyayı kaydettikten sonra, uygulamamıza bakacak olursa, hala ürünleri alamadığımızı görebilirsiniz. Bunun sebebi dağıtım kanalını(publication) oluştursakda, henüz abone(subscribe) olmamış olmamız. Şimdi daha iyi anlayabilmek için bir test yapalım, uygulamamız çalışırken , tarayıcının konsolundan aşağıdaki javascript kodunu girelim ve ne olacağına bakalım;

var urunlerPub = Meteor.subscribe('urunlerPub')

Yukaridaki bir satır kod ile, “urunlePub” isimli publication a bağlanmış olduk. Yukarıdaki kodu consoldan çalıştırır çalıştırmaz, ürünlerin istemcimize geldiğini göreceksiniz.  Aşağıdaki görüntüye bakınca daha rahat anlaşılacaktır.

Normalde subscription  başlatmak için bir değişken tanımlama zorunluluğu yok, ama video da gördüğünüz gibi bu değişkenle bir referansa sahip olduğumuz için, subscription ı kod ile de dinamik olarak yönetebilmektiyiz. Her subscription için bir uniqe / benzersiz  id oluşturulduğunuda görmüş olduk videoda ayrıca subscript için  .stop() metodunu çağırarak subscription sonlandırmanında çok kolay olduğunuda fark etmişssinizdir.

Tabiki subscription larımızı bu şekilde konsoldan yönetmeyeceğiz ama ben arka planda ne olup bitiyor biraz daha rahat anlaşılsın diye önce console üzerinden bir örnek yapmak istedim. Şimdi Uygulamıza dönelim ve  subscription i kodlarımız içinde tamımlayalım.

AutoPublish paketi, Meteor ile dahili geldiği için login paketi gibi ayrıyeten yüklememiştik. İlk bakışta kulanım açısından daha kolay gözüksede, esas amacı geliştirme ve öğrenme sürecinde kolaylık sağlamak. Hem güvenlik hem de performasn açısından gerçek uygulamarda mutlaka kaldırmanız gereken bir paket. Sadece öğreneme / deneme süreçlerinde kullanılması gereken bir paket.

Publicationlarımızı bir arada tuttuğumuz gibi, Subscription larıda aynı dosyada tutarak devam edelim. client  klasörü altında, subscription.js isimli bir dosya oluşturarak devam edelim;

client/subscription.js

// ürünler kanalına bağlan
Meteor.subscribe('urunlerPub');

bağlantımızı tanımlayıp kayıt edin ve tarayıcıda ürünlerin tekrar gözükdüğünü göreceksiniz. Bu arada, bir hatırlatmayıda tekrar yapmakta fayda var, “urunlerPub” oluşturduğumuz publicaiton a verdiğimiz  isim, yani collection ismi değil. Bu isim tekil olmalı , örneğin sadece “yönetici” lerin bağlanabileceği ve daha fazla bilgiyi içeren ikinci bir publication oluşturup sadece “yetkisi olan kullanıcılara”  “urunlerAdminPub” şeklinde açabiliriz. Yine ayrıca publication ve subscription işlemleri sırasında her türlü parametre alış verişide mümkün bu konuları diğer yazılarda ele alacağız inş. Burada daha üst seviyede ve çalışma mantığını anlamak adına biraz daha sade tutmaya çalıştım.

Kısaca özetleyecek olursak, sunucumuzdan istemcilere yollayacağımız tüm verileri , publication lar olarak tanımlayıp(server klasörü altında), istemcide de subscripton(client klasörü altında) ile kullanabilmekteyiz. Böylece çok esnek ve modüler bir veri akışı oluşturabilmekteyiz.

Insecure paketi ve Meteor Methods

Tıpkı autopublish paketimiz gibi, dahili olarak gelen bir paketimiz daha var “Insecure“. Bu paket, isminden de anlaşılabileceği gibi, her hangi bir güvenlik kontrolü yapmadan, Koleksiyonlarımızı ve Meteorun bazı diğer özelliklerini kullanmamıza imkan vermekte.

Tıpkı autopublish gibi insecure paketinide sadece geliştirme süecinde veya öğrenme sürecinde bir süre işimizi kolaylaştırması için kullanıyoruz. Hiç bir zaman gerçek uygulamalarımızda kullanmayacağız.

Hatırlarsanız, bundan önceki yazıda, login sistemi oluşturmuştuk ve sadece kullanıcı login olduktan sonra ekleme ve düzenleme yapabilmekteydi. Ama bu kontrol dikkat ettiyseniz sadece UI bazlıydı. Yani aslında gerçek bir kontrol yapmıyorduk sadece kullanıcı login olduysa UI üzerinde bazı yerleri gösteriyorduk yada aksi durumda gizliyorduk.

Başka bir değişle, sunucu tarafında hiç bir kontrol yapmıyorduk. Ve Insecure paketi yüklü ve aktif olduğu için Meteor da bu duruma hiç bir tepki vermemekteydi.

Gerçek bir uygulamada, sadece UI üzerinden değil farklı yollarla da veri almaya devam ederiz. Örneğin REST üzerinden yada socket bağlantısı ile ve Meteor örneğinde buna tarayıcı konsolunuda ekleyin.  Kullanıcı UI ı kullandığı sürece sorun olmasada, sunucumuza UI dışında ulaşıp veri ekleme silme vs işlemleride yapacağımız durumlar oalcaktır.

Bu durum sadece Meteor için değil diğer tüm sunucu taraflı platformlar içinde aynıdır. Sadece istemcide kontrol yapmak yetmeyecektir ayrıca birde sunucu taraflı kontrollere ihtiyacımız olacaktır. Bu durumu daha iyi anlayabilmek için, uygulamamıza geri dönün ve eğer login olmuşsanız logout olun. Blaze,  UI üzerinde  ürün ekleme kısmını ve işlem butonlarını gizleyecektir. Ama sunucumuzda hala bir kontrol olmadigi icin yinede baska yollarla veri ekleme yada silme islemleri yapabilme imkanimiz olacaktir.

Şimdi Rest yada socket bağlantısı ile de yapabilsekde, Tarayici konsolunun daha kolay kullanimi olacagi icin onu kullanalim. Ama bunun icin  “client/urunler/urunListe.js” içinde sadece bu durumu anlamak adına küçük bir değişiklik yapalım, aşağıdaki satır ile, urunler  koleksiyonumuzu tarayıcı konsolundan da kullanabilecek şekilde global bir değişkene atayalım;

Template.urunListe.onCreated(function(){
    window.Urunler = Urunler; 
});

şimdi  tarayıcı konsolunu açıp, login olmadığınız halde aşağıdaki şekliyle bir ürünü ekleyelim;

Urunler.insert({urun:"yetkisiz urun"})

Gördüğünüz gibi sunucu taraflı hiç bir kontrolümüz olmadığı için UI üzerinden ekleyemesemde başka yollarla veriyi ekleyebildim. Şimdi ilk olarak Meteorun dahili kontrol ve güvenlik sistemini aktif etmek için “Insecure” paketini kaldıralım;

meteor remove insecure

insecure paketini kaldırdıktan sonra şimdi tarayıcı konsolundan tekar veri eklemeyi deneyin bu sefer aşağıdaki mesajı alacaksınız;

insert failed: Access denied

Gördüğünüz gibi, insecure paketini kaldırdığımızda Meteor bir çok standart güvenlik protokolünü devreye alacaktır. Ve böylece en azından başlangıç için yeteri kadar güvenlik önlemi devreye girecektir.

Ayrıca , koleksiyonlarımız üzerinden yapacağımız işlemler için daha fazla kontrol isteyeceğimiz durumlar olacaktır. Örneğin, aşağıdaki gibi bir ürün eklemeye çalıştığımızı düşünelim;

Urunler.insert({urun:'gecersiz urun', fiyat:"gecersiz fiyat", stok:"gecersiz stok"})

İnsert metodu ile eklemeye çalıştığımız bu yeni ürün, veri tabanına sorunsuz eklenecektir. Halbuki, taşıdığı değerler normalde geçersiz olduğu için(örneğin fiyat ve stok için rakam yerine metin değerler eklemeye çalışıyoruz) bir hata almız lazım ama insert() metodu sadece adındanda anlaşılabileceği gibi, veriyi eklemekle yükümlü diğer kontroller için bizim fazladan bir şeyler yapmamız lazım.

Ve yine sadece eklenen verinin “formatın düzgün olması” değil, veriyi kim ekliyor yetkisi varmı yokmu gibi bir çok başkaca durum da mevcut. Birde bazen veriyi eklemeden önce onu kendimiz formatlamak isteyebiliriz,(örneğin tarih zaman değerlerini kullanıcıdan aldığımız gibi değilde başka formatta kaydetmek gibi.)

Başka bir konuda bazen veriyi ekledikten sonra yada eklemeden önce bazı işlemler yapmak isteyebiliriz.(Örneğin, bir kayıt eklendikten sonra email göndermek gibi)

İşte bütün bu durumlar ve daha fazlasını kolayca yönetebilmek için Meteor bize “Meteor.methods()” alt yapısını sunmakta.

Meteor.methods

Meteor metodlarımız aslında basit bir çalışma mantığına sahipler. Direkt olarak Koleksiyonlarımız üzerinde insert(), remove() vd. metodları kullanmak yerine, kendi tnaımlaycağımız metodlarla bu Koleksiyonlarımız la beraber gelen insert(), remove() vd. metodları sarmalamış olacağız. ,

Böylece bir seviye daha abstraction/soyutlama sağlamış olacağız. İstemcilerin direkt olarak Koleksiyonlarımız üzerindeki insert/update/remove gibi metodları kullanmalarını kısıtlamış olacağız. Bu yöntem ayrıca veri işleme katmamızı çok sade bir şekilde bir den fazla kullanıcı grubu için(ziyaretci, üye,editör, admin vs. gibi) yönetmemizede imkan verecektir.

Şimdi ilk metodumuzu tanımlayarak devam edelim, böylece daha kolay anlaşılacaktır. Meteor Metdolarımızın bir kısmını hem istemci hem sunucu tarafından erişilebilecek şekilde tanımlayacağız, bir kısmını ise sadece sunucu tarafında erişilebilecek şekilde tanımlaycağız. Bunu neden böyle yaptığımıza sonra tekrar bakacağız.

Şimdi, ilk olarak hem istemciden hem sunucu tarafından erişilebilecek metodlarımızı tutması için uygulamamızın ana dizininde bir klasör oluşturup ismini “metods” olarak belirleyelm. Kolay olması için her bir koleksiyonumuz için ayrı bir metod dosyası oluşturacağız. metods klasörü altında, urunMetods.js isimli bir dosya oluşturup devam edelim;

methods/urunMethods.js

import { Meteor } from 'meteor/meteor';
import { check } from 'meteor/check';
import {Urunler} from '../collections/Urunler'

Meteor.methods({
    'urunler.ekle'(urun){
        check(urun,{
            urun:String,
            fiyat:Number,
            stok:Number
        })
        // Kullanici icin login kontrolu
        if (! Meteor.userId()) {
            throw new Meteor.Error('not-authorized');
        }
        // kontrollerimiz tamam urunu ekleyebiliriz
        Urunler.insert(urun)

    }
})

Yukarıdaki kodlarımızı konuşmadan önce, yukarıda yeni kullandığımız bir paket olan check paketini indirmeyi unutmayın

meteor add check

check paketi, verileri kontrol etmemize yardımcı olan küçük hızlı ve sade bir Validation/Doğrulama kütüphanesi. Meteor.js bir javascript platformu olduğu için Javscript dünyasında mevcut(node.js kütüphaneleri de dahil) hemen hemen her doğrulama kütüphanesini kullanabilirsiniz.  check sade be hızlı olduğu için bir çok durumda işinizi görecektir.

urunMethods.js e baktığımızda, ilk olarak aşaıdaki metod tanımızdan bahsederek  başlayalım;

Meteor.methods({
    'urunler.ekle'(urun){
           ...        
})

Tıpkı, publicationlarımız da olduğu gibi, önce metodumuza bi isim verdik ‘urunler.ekle‘ ayrıca metodumuz ekleyeceğimiz ürünü parametre olarak almakta “(urun)” . İsimlendirmede tıpkı publicationlarda olduğu gibi özgürüz ama ben böyle ” koleksiyon.islem” şeklinde isimlendirmeyi çok kolay ve kendini açıklayan bir isimlendirme olarak gördüğüm için bu şekilde tercih ettim.

Metodumuz içinde devam eden kısımda, önce check ile verilerimizi kontrol ettik.

check(urun,{
    urun:String,
    fiyat:Number,
    stok:Number
})

check le ilgili detaylara bu adresten bakabilirsiniz. Eğer doğrulama işlemimiz başarılıysa, bir kontrol daha yapıyoruz

“Kullanıcı Login kontrolü”

if (! Meteor.userId()) {
    throw new Meteor.Error('not-authorized');
}

sonrasinda ürünü ekliyoruz. Meteor.userId()  Meteorun global yardimcilarindan biri, aktif kullanıcıyı temsil etmekte. Eğer her hangi bir değer taşımıyorsa “basitçe” login olan bir kullanıcı yok demektir.

burada dikkat etmemiz gereken bir konu, eğer meteor sadece Web arayüzünden/yada http protokolünden gelen istekler için tasarlansaydı “Meteor.userId()”  kontrolü ” biraz ilkel gibi gözükebilirdi.

Ama Meteorun,  bir çok farklı kanaldan ve bir çok farklı istemci türünden(web, mobile, masa üstü, IOT cihazları vs.) ve bir çok farklı protokol ile (rest,http,web socket,ddp vs) veri alabildiği için çok basit formüle edilmiş ama çok yetenekli bir kullanıcı kontrol sistemi olduğunu görebiliriz.

Hangi kanaldan ve ne tür bir cihazdan gelirse gelsin, tek bir kontrol ile (meteor.userId()) bu sade ma güçlü doğrulama yapabilme imkanını vermekte  bu alt yapı ile Meteor.

Ürün ekleme ile ilgili metodumuzu bu şekilde tanımladıktan sonra, bu metodu artık istemci tarafında kullanabiliriz. Bunun için, ürün ekleme işlemini yaptığımız, “client/urunler/urunDuzenle.js” dosyamızda ürün ekleme işlemimizi yaptığımız kısmı şu şekilde değiştirerek devam edelim,

else {
   // Urunler.insert(yeniUrun); //
    Meteor.call('urunler.ekle', yeniUrun);
}

İlk hali ile,  Urunler.insert(yeniUrun); olan ekleme işlemimizi Meteor.call(“urun.ekle”) şeklinde bir Meteor metod çağrısına dönüştürdük. Kullanım olarak ilk parametremizin “çağıracağımız metodun ismi” sonraki parametrelerin ise metoda göndereceğimiz her türlü veriyi taşıyacak parametrelerimiz olduğunu hatırlatalım.

Şimdi, birde remove() ilemi için metod tanımlayalım;

'urunler.sil'(urunId) {
    check(urunId, String);
    Urunler.remove(urunId);
}

ve istemci tarafında ürün silme işlemimizi yağtığımız kısmı günceleyelim ;

client/urunler/urun.js

'click #sil'(event){
   const urun = this;
   // Urunler.remove(urun._id) // eski hali
    Meteor.call('urunler.sil', urun._id); //  yeni hali
}

bu haliyle uygulamamiza bakacak olursak, silme ve ekleme işlemimizi sorunsuz gerçekleştirebildiğimizi göreceğiz.  Meteor metodlarını sadece CRUD(silme ekleme, güncelleme vs.) için değil koleksiyonunuz için istediğiniz her türlü yeteneği sağlamak için kullanabilirirsiniz. Örneğin aşağıdaki  metodu ile bir ürünü stok dışında bırakalım,

methods/urunMethods.js

'urunler.stokdisi'(urunId){
    Urunler.update(urunId, { $set: { stok: 0 } });
}

Yukarıdaki metod ile, Meteor.call(‘urunler.stokdisi”,urunId)  şeklinde bir çağrı ile dilediğimiz ürünü stok dışı yapabiliriz.  client/urunler/urun.html dosyamıza , aşağıdaki butonu ekleyin,

<button id="stokdisi" class="btn btn-warning btn-xs"> Stok Sıfırla</button>

sonrasında, client/urunler/urun.js içine de ilgili metodumuzu çağıracağımız event handleri / olay yakalayıcıyı ekleyin;

'click #stokdisi'(event){
    const urun = this;
    Meteor.call('urunler.stokdisi', urun._id);
}

son olarak ürün güncelleme metodumuzuda ekleyelim ;

methods/urunMethods.js

'urunler.guncelle'(urunId,urun){
    check(urun,{
        urun:String,
        fiyat:Number,
        stok:Number
    })
    // Kullanici icin login kontrolu
    if (! Meteor.userId()) {
        throw new Meteor.Error('not-authorized');
    }
    // kontrollerimiz tamam urunu guncelle
    Urunler.update(urunId,urun)
}

ve client/urunler/urunDuzenle.js

if (islem == 'Ürün Düzenle') {
    const seciliUrun = Session.get('seciliUrun')
    //Urunler.update(seciliUrun._id, yeniUrun)
    Meteor.call('urunler.guncelle',seciliUrun._id, yeniUrun);
    Session.set('islem', "Ürün Ekle")
}

 bu haliyle uygulamamıza baacak olursak  ;

buraya kadar olan kısımda bir iki eksiğimiz daha var, ürünlerle ilgili aşağıdaki durumlara bakalım ;

  1. Ürünle ilgili işlemi kim yapıyor?
  2. eğer sadece herkes kendi eklediği ürünleri kontrol edebilse daha iyi olmazmı?

Bu iki maddeyide hızlıca değerlendirelim. İlk olarak ürünü ekleyen kişi kim onu da ürünle birlikte tutalım. Ürün ekleme yaptığımız alanı küçük bir güncelleme ile buna uygun hale getirerek devam edelim.

client/urunler/urunDuzenle.js

const yeniUrun = {
    public:urun.public.checked ,
    urun: urun.urunIsmi.value,
    fiyat:parseInt(urun.urunFiyat.value),
    stok: parseInt(urun.urunStok.value)
}
...
else {
   // Urunler.insert(yeniUrun); //
    yeniUrun.ekleyenId = Meteor.userId()
    yeniUrun.kullaniciAdi= Meteor.user().emails[0].address;
    Meteor.call('urunler.ekle', yeniUrun);
}

 

Ürünü eklemeden önce ürüne, ürünü ekleyen kullanıcının bilgilerinide eklemiş olduk.  Meteor.userId() yi yukarıda görmüştük, burada yeni olan Meteor.user() metodu login olan kullanıcının bilgilerine ulaşmamıza imkan vermekte. Bizim durumumuzda sadece kullanıcı emaili yeterli olacak. Account paketimiz bir kullanici icin birden fazla email tutma imkani verdigi icin email dizisinden ilk adresi aliyoruz.

Birde her ürün için bir alan daha ekledik, bu yeni alanda public adında bir alan oldu. Böylece public olan urunleri giriş yapan tüm kullanıcılar günceleyebilsin, public olmayanları ise sadece ekleyen kullanıcılar görüp yönetebilsin.

UI bu duruma göre güncellemek için, ilk olarak urun duzenleme ve ekleme templatimize bu yeni alani ekleyelim

client/urunler/urunDuzenle.html

<div class="form-group">
    <label >Urun herkese acikmi?</label>
    <input type="checkbox" name="public" id="" checked="{{public}}" class="form-control">
</div>

sonrasinda urun templatimize bu degisimi yansitalim; yeni bir tablo satiri ekleyelim

client/urunler/urun.html

<td>
    {{#if public}} Herkese Acik Urun -{{/if}}
    <span class="badge bg-info">{{kullaniciAdi}}</span>
</td>

Son olarak iki kucuk degisiklik daha yapmamiz gerekecek, client/urunler/urunListe.html içinde
tablomuza yeni bir sütün ekleylim,

<th>Bilgi</th>

ve urunler publicationimizi bu yeni durumua gore duzenleyelim;

server/publication.js


Meteor.publish('urunlerPub', function urunlerPublication() {
    const filitre = {
        $or: [
            {public: {$ne: false}},
            {ekleyenId: this.userId},
        ]
    }
    return Urunler.find(filitre);
});

Yukarıda publication içinde verimizi filitreledik. Sadece kullanıcının kendi eklediği urunler ve birde public olanlar seçilmiş oldu. this.userId , Meteor.userId() nin  eş değer bir başka kullanım şekli.

Bu haliyle kayıt edip, uygulamamıza baktığımızda hiç bir ürünü göremeyeceğiz, çünkü daha önce eklediğimiz ürünlerin hiç birinde public alanı ve kullanıcı bilgisini taşıyan alanlar mevcut değildi. Daha önce eklediğimiz tüm kayıtları silerek taze bir veri tabanı ile devam edelim, komut satırından aşağıdaki komutu ile db yi reset edelim;

meteor reset

Artık sıfır bir DB ile yeni kayıtlarımızı ekleyelim ve uygulamamıza iki farklı tarayıcıda iki farklı hesap ile açalım ve bakalım;

 

Yazı çok uzadığı için bu ara yazı serisinin son yazısını buarada bitirelim. Değinmek istediğim bnir kaö konu daha vardı ama en önemli olanlara değinmeye çalıştım. Bu ara-yazı serisi ile birlikte, Meteor dünyasındaki ana kavramlar ve temel yapı taşlarını 3 aşağı 5 yukarı görmüş olduk.

Uygulamanın buraya kadar olan halini buradan temin edebilirsiniz

Artık Meteor.js serisine devam edip daha yetekenli, kararlı ve ölçeklenebilir uygulamalar geliştirebilmek adına serimize kaldığımız yerden devam edebiliriz.

Kolay Gelsin.

3 thoughts on “Meteor.js Serisi : [Ara yazı – 3 ] Publish / Subscribe, Autopublish, Meteor Methods ve diğer bazı önemli konular

  1. Serinin devamını sabırsızlıkla bekliyorum. Meteor çok güçlü bir platforma benziyor. Özellikle React ile devam ederseniz süper olur.
    Emeğinize sağlık. Teşekkürler

  2. Turkce kaynak azliginda, metorun bir cok onemli ozelligini anlasilir bir sekilde bulmak cok guzel.
    Tesekkurler.

Leave a Reply

Your email address will not be published. Required fields are marked *