Node.js'te Connect ile Web Sunucuya Bağlanma

Node.js'te Connect ile Web Sunucuya Bağlanma

Node.js, ortak ağ uygulamaları için, temel API'ler (Application Program Interface - Uygulama Programı Arayüzü) sağlar. Bunlar arasında en çok ihtiyaç duyacaklarınız, HTTP ve TCP ile ilgili API'lerdir. 
Oysa, gerçek dünya uygulamalarında peş peşe API'ler kullanmak yerine, bazen daha basit metotlar tercih edilir. Connect bu anlamda bir araç kutusudur. İstemler (requests) ve cevaplar (responses) arasındaki arayüzü organize etmekte yeni bir yol sunmaktadır. Orta katman ürünü (Middleware) olarak da anılır.

Connect HTTP Orta Katman Ürün Çatı Yazılımı

Node yazılımı içinde bazı HTTP uygulamalarını kolaylaştırmak amacıyla yerleştirilmiş, çatı yazılımlar da mevcuttur. Bunlardan biri de Connect yazılımıdır. Connect, orta katman (middleware) ürün bileşenleri için bir model tanımlar ve onların çalıştırılabilmesi için bir işlem gücü sunar.
Genel olarak orta katman ürün bileşenleri, programcı tarafından bir yığınla birlikte tutulabilir. Connect, HTTP istemi aldığı zaman, orta katman ürün motoru bunları sırayla çağırır.

Kendi HTTP Orta Katman Ürününüzü Oluşturmak

Aslında farkettiğiniz gibi, bir orta katman bileşeni, standart HTTP sunucu talep dinleyiciye (server request listener) benzeyen, istem ve cevap nesnelerini alan bir fonksiyondan başka bir şey değildir.
Bir orta katman ürün bileşenini çalıştırabilmek için önce belleğe yüklemek gerekir. Bu amaçla da

$ npm install connect

komutu kullanılır.

Basit bir örnek

Ortak katman (middleware) ürün kullanacağınız çok basit bir örnek aşağıda verilmiştir. Öncelikle aşağıdaki kodu oluşturun.

var http=require('http');
var connect = require('connect');
// import middlewares

var SELAM = require('/usr/local/bin/cnn.js');
var app = http.createServer(SELAM);
app.listen(8080);

Daha sonra, kodu conn.js adı ile saklayın.
Şimdi de aşağıdaki kodu oluşturun ve aynı dizin içinde cnn.js adı ile saklayın.

function SELAM(req, res) { 
res.end('MERHABA');
}
module.exports = SELAM;

Ardından, conn.js'i çalıştırın.
Tarayıcıda 127.0.0.1:8080 IP adresini girin. Aşağıdaki sonucu elde edeceksiniz:


Örnek kod: Yasaklı siteler

Normal olarak bir connect server, bir istem (request) alırsa, HTTP cevabından önce bazı fonksiyonlar devreye girer. Bu fonksiyonlar, orta katman ürünü olarak adlandırılır. Connect ile çalışırken req, res ve next nesneleri kullanılır. Orta katman ürün fonksiyonları işlevlerini yerine getirirken, bu nesneleri, gerekirse bir sonraki inline fonksiyona geçirir.
Orta katman ürün fonksiyonları, connect'te connect.use(), express'te ise app.use() metotları sayesinde talep akışı (request flow) içine yüklenir. Aşağıdaki programa bir göz atın.

var http = require('http');
var connect = require('connect');

var app = connect();
var ipban = require('./ipban.js');
var app = connect();
app.use(ipban());
app.use(function(req, res) {
    res.end('SELAM!');
});
app.use(function(req, res) {
    res.end('SELAM!');
});

http.createServer(app).listen(3000);

Burada sadece bir orta katman ürünü mevcuttur. Sunucuya her talep olduğunda 'SELAM' mesajını vermektedir. Orta katman ürünleri, her ne kadar connect.use() metodu kullanılarak yüklenebilecek fonksiyonlar ise de en iyi yol yine de Node.js kodu hazırlamaktır.
Şimdi yukardaki kodu sercon.js adıyla bin dizinine yükleyin.
Aşağıdaki programda ise yasaklı olduğu var sayılan IP adreslerini içeren bir dizi oluşturulmakta ve yasaklı sitenin talep edilmesi halinde verilecek mesaj gönderilmektedir:

var YASAK = [
'127.0.0.1',
'192.168.2.12',
];

// the middleware function
module.exports = function() {

    return function(req, res, next) {
        if (YASAK.indexOf(req.connection.remoteAddress) > -1) {
            res.end('YASAK');
        }
        else { next(); }
    }

Bu programı da ipban.js adıyla kaydedin.
Şimdi sunucuyu çalıştırmak için

node sercon.js

komutunu girin:
Tarayıcıdaysa 127.0.0.1:3000 adresini girerek bu sunucuya erişmeye çalışın.


Web sayfasında 'YASAK' mesajının yazıldığını göreceksiniz.


Yorumlar

Bu blogdaki popüler yayınlar

İç İçe Döngüler

CSS Bir Elemanın Genişliği ve Yüksekliği

JavaScript Dilinde Fonksiyon Çağırma Teknikleri