SORU
7 EYLÜL 2011, ÇARŞAMBA


Katman ve uygulama nedir.aslında Expressjs anlamına kullanılır?

Hemen hemen her Express uygulaması katman için app.use bir deyim vardır anlıyorum ama katman aslında ne olduğunu ve app.use deyimi ne yaptığını net, kısa ve öz bir açıklama bulamadım. Hatta bu ifade biraz bu konuda muğlak kendilerini dokümanlar. Bana lütfen bu kavramları açıklayabilir misiniz?

CEVAP
7 EYLÜL 2011, ÇARŞAMBA


middleware

Yeni bir proje içinde katman kavramı ayırma yarısına geldim.

Katman bir akışı gerekir eylemlerin yığın tanımlamak sağlar. Express sunucular kendilerini katman yığını.

// express
var app = express.createServer();
// middleware
var stack = middleware();

Sonra .use çağırarak katman yığın katmanları ekleyebilirsiniz

// express
app.use(express.static(..));
// middleware
stack.use(function(data, next) {
  next();
});

Katman yığınının içinde bir katman n parametreleri (2, req & res express için) ve next bir işlevi alan bir fonksiyon.

Katman katman bazı hesaplamalar yapmak, parametreleri artırmak ve next çağrı bekliyor.

Yığın üstesinden sürece hiçbir şey yapmaz. Express gelen bir HTTP isteği sunucuda yakalandı yığını her zaman ele verecektir. Katman ile el ile yığın işlemek.

// express, you need to do nothing
// middleware
stack.handle(someData);

Daha kapsamlı bir örnek :

var middleware = require("../src/middleware.js");

var stack = middleware(function(data, next) {
    data.foo = data.data*2;
    next();
}, function(data, next) {
    setTimeout(function() {
        data.async = true;
        next();
    }, 100)
}, function(data) {
    console.log(data);
});

stack.handle({
    "data": 42
})

Express sadece express her gelen HTTP için işlemesi gereken işlemleri bir yığın isteği tanımlamak şart.

İfade açısından (daha sonra yerine takın) genel katman ve rota belirli bir katman var. Bu her gelen HTTP istekleri için yığın veya belli bir rota ile etkileşimde HTTP istekleri için ekleyin sadece bir katman ekleyebilirsiniz anlamına gelir.

Express & katman örnekleri gelişmiş :

// middleware 

var stack = middleware(function(req, res, next) {
    users.getAll(function(err, users) {
        if (err) next(err);
        req.users = users;
        next();  
    });
}, function(req, res, next) {
    posts.getAll(function(err, posts) {
        if (err) next(err);
        req.posts = posts;
        next();
    })
}, function(req, res, next) {
    req.posts.forEach(function(post) {
        post.user = req.users[post.userId];
    });

    res.render("blog/posts", {
        "posts": req.posts
    });
});

var app = express.createServer();

app.get("/posts", function(req, res) {
   stack.handle(req, res); 
});

// express

var app = express.createServer();

app.get("/posts", [
    function(req, res, next) {
        users.getAll(function(err, users) {
            if (err) next(err);
            req.users = users;
            next();  
        });
    }, function(req, res, next) {
        posts.getAll(function(err, posts) {
            if (err) next(err);
            req.posts = posts;
            next();
        })
    }, function(req, res, next) {
        req.posts.forEach(function(post) {
            post.user = req.users[post.userId];
        });

        res.render("blog/posts", {
            "posts": req.posts
        });
    }
], function(req, res) {
   stack.handle(req, res); 
});

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • BSA

    BSA

    9 NİSAN 2012
  • Glove and Boots

    Glove and Bo

    1 ŞUBAT 2007
  • ShoSho

    ShoSho

    20 Ocak 2010