Express.js'de Routing İşlemleri - Yazılım Mimarileri ve Tasarım Desenleri Üzerine

Express.js’de Routing İşlemleri

Merhaba,

Bu makalemizde web platformundaki tüm uygulamlarda en kritik husus olan, kullanıcı etkilemişinin en temel unsuru ve SEO açısından arama motorlarının okunabilirlik derecesi bakımından oldukça önemsenen url yapılarının şematize edilmesi için kullanılan Routing mekanizmasını Node.js frameworkünün Express.js modülü çerçevesinde değerlendiriyor olacağız.

Bilindiği üzere dört temel Http metodu mevcuttur. Bunlar;

  1. GET
  2. POST
  3. PUT
  4. DELETE

Express.js’de bu temel http metotlarının haricinde bir de “ALL” metodu mevcuttur. Bu metot gelen tüm istekleri karşılaması için diğer metotların işlevini tek başına barındırabilecek şekilde oluşturulmuştur.

Express.js’de bu metotlar kullanarak routing rotaları oluşturulmaktadır. Bunu önceki makalelerimizde ele aldığımız gibi hızlıca burada da örneklendirelim.

const express = require("express");
const app = express();

app.get("/users", (request, response) => {
    response.send(`${request.url} : GET`);
}).post("/createuser", (request, response) => {
    response.send(`${request.url} : POST`);
}).put("/updateuser", (request, response) => {
    response.send(`${request.url} : PUT`);
}).delete("/removeuser", (request, response) => {
    response.send(`${request.url} : DELETE`);
});

app.listen(1453, () => {
    console.log("Yayın başladı...");
});

Görüldüğü üzere route yapıları yukarıdaki gibi oluşturulmaktadır. Oluşturulan bu istekleri “Postman” uygulamasıyla denersek eğer;

GETPOST
Express.js'de Routing İşlemleri - GETExpress.js'de Routing İşlemleri - POST
PUTDELETE
Express.js'de Routing İşlemleri - PUTExpress.js'de Routing İşlemleri - DELETE

gördüğünüz gibi ilgili rotalara isteklerimiz başarıyla gerçekleştirilmektedir.

Express.js route yapılanmasında belirli özel karakterlerle rotalarımızı daha da özelleştirebiliriz. Bu karakterler; “?”, “*” ve “+” operatörleridir. Şimdi bu operatörleri sırasıyla incelersek eğer;

  • ?
    “?” operatörü, sağında kullanıldığı karakteri zorunlu olmaktan çıkarır.
    Örneğin;
    “Gen?çay” değerini ele alırsak eğer ‘n’ karakteri olsada olur! olmasa da!
    “Gen?çay” = “Gençay” = “Geçay”
    Benzer mantıkla birden fazla karakter üzerinde bu operatörü kullanmak isterseniz ilgili ifadeleri parantez içine almanız yeterlidir.
    “Ge(nç)ay” = “Gençay” = “Geay”
    Burada dikkat edilmesi gereken husus birden fazla karakter üzerinde çalışırken ya o karakterlerin hepsi ifade içerisinde olmayacak ya da hepsi olacak… Son örneğimizde bu uyarıya istinaden “Genay” ifadesinde hata ile karşılaşılacaktır.

    Kodsal örnek vermemiz gerekirse;

    app.get("/use?rs", (request, response) => {
        response.send(`${request.url} : GET`);
    });
    

    Express.js'de Routing İşlemleri - GET

    app.get("/u(se)?rs", (request, response) => {
        response.send(`${request.url} : GET`);
    });
    

    Express.js'de Routing İşlemleri - GET

  • *
    * operatörü kullanıldığı yere herhangi bir değeri/ifadeyi getirmemizi sağlayan bir operatördür.
    Örneğin;
    “Gen*çay” ifadesinde ‘*’ operatörünün yerine herhangi bir ifade getirilebilir.
    “Gen*çay” = “Gennçay” = “Genaçay”” = “Genzmeceylançay” = “Gensebepsizbosyereayrilacaksançay” = vs. vs.
    Kodsal örnek;

    app.get("/use*rs", (request, response) => {
        response.send(`${request.url} : GET`);
    });
    

    Express.js'de Routing İşlemleri - GET

  • +
    “+” operatörü solundaki ifadenin aynısını çoğaltan bir operatördür.
    Örneğin;
    “Gen+çay” ifadesinde ‘n’ karakteri çoğaltılarak “Gennnnn…çay” şeklinde yazılabilir.
    Kodsal örnek;

    app.get("/use+rs", (request, response) => {
        response.send(`${request.url} : GET`);
    });
    

    Express.js'de Routing İşlemleri - GET

GET İsteklerine Parametre Atama

Gelen GET isteklerine Query String tarzında parametre atamak için “:” operatörüyle aşağıdaki gibi bir değişken tanımlıyoruz.

app.get("/user/:id", (request, response) => {
    response.send(request.params);
});

Express.js'de Routing İşlemleri - GET
Dikkat ederseniz eğer “:” operatörü ile “id” isimli bir değişken tanımlamış bulunmaktayız. İlgili değişkeleri ve değerlerini “request.params” komutuyla elde edebilmekteyiz.

app.get("/user/:detail/:id", (request, response) => {
    response.send(`id : ${request.params.id} - detail : ${request.params.detail}`);
    console.log();
});

Express.js'de Routing İşlemleri - GET

Router Nesnesi İle Route Yönetimi

Çalışmalarımızda birbirinden farklı route yapılarını tek bir sınıf altında toplamak ileriye dönük oldukça karışık ve zayıf yönetilebilir bir durum arz edecektir. Dolayısıyla route yapılanmalarını ilgili modüllere bölerek bu modülleri Express.js’de ki Router nesnesi aracılığıyla bir bütün olarak yönetmek çalışmalarımızda oldukça hızlı ve karışıklılığa mahal vermeksizin anlamlı ilerlememizi sağlayacaktır.

Şimdi bir örnek senaryo üzerinden konuyu ele alalım. İlk olarak birden fazla route yapısını oluşturacağımız sınıflarımızı oluşturalım.

//-user.js
const express = require("express");
const router = express.Router();

router.get("/getusers", (request, response) => {
    response.send(`URL : ${request.url} | RequestType : GET`);
}).post("/adduser", (request, response) => {
    response.send(`URL : ${request.url} | RequestType : POST`);
});

module.exports = router;
//-content.js
const express = require("express");
const router = express.Router();

router.get("/getcontent", (request, response) => {
    response.send(`URL : ${request.url} | RequestType : GET`);
}).post("/addcontent", (request, response) => {
    response.send(`URL : ${request.url} | RequestType : POST`);
});

module.exports = router;

Sınıflarımıza dikkat ederseniz eğer Express modülü içerisindeki “Router” metodunu kullanılarak bir route yapılanması oluşturulmaktadır ve bu route yapısı “module.exports” ile diğer modüllere taşınmaktadır. Bu route yapılarının kullanılabilmesi için ilgili sınıflara “require” edilmeleri ve aşağıdaki gibi uygulamaya “use” fonksiyonuyla tanıtılmaları gerekmektedir.

const express = require("express");
const app = express();
const userRoutes = require("./user");
const contentRoutes = require("./content");
app.use("/", userRoutes);
app.use("/", contentRoutes);

app.listen(1453, () => {
    console.log("Yayın başladı...");
});

Bu işlemden sonra ilgili rotalara isteklerde bulunursak eğer;

user.jscontent.js
Express.js'de Routing İşlemleri - GETExpress.js'de Routing İşlemleri - GET
Express.js'de Routing İşlemleri - GETExpress.js'de Routing İşlemleri - POST

görsellerde olduğu gibi sıkıntısız bir şekilde çalıştığını göreceksiniz.

Son olarak “use” fonksiyonunda verilen ilk parametrenin değerine göre ilgili route yapılanmaları ilgili değerin altında olacak şekilde çağrılacaktırlar. Şöyle ki;

app.use("/user/", userRoutes);
app.use("/content/", contentRoutes);

şeklinde tanımlama yapılsaydı “user.js” de ki urller “user/****” şeklinde ve “content.js” de ki urller ise “content/****” şeklinde oluşturulması gerekecekti.

Evet… Express.js’de routing işlemlerini tam teferruatlı ele almaya çalıştık. Faydalanmanız dileğiyle…

Sonraki yazılarımda görüşmek üzere…
İyi çalışmalar…

Bunlar da hoşunuza gidebilir...

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

*

Copy Protected by Chetan's WP-Copyprotect.