İçeriğe geç
LexerLangv0.1.0

Yönlendirme

$app.routes.add, desenler, parametreler ve $res üzerinden yanıt.

LexerLang
$app.routes.add({
    "/": func($req, $res) as void
        $doc = new html_document
        $doc.body.add(`<h2>Ana Sayfa</h2>`)
        $res.document($doc)
    end func

    "/urun/:id": func($req, $res) as void
        $res.send("kimlik: " + $req.params.id)
    end func

    "/eski": "/sayfalar/yeni.lx"      # dosya yönlendirmesi
})

Değerin türü ne yapılacağını belirler: fonksiyon ise çağrılır, metin ise o .lx dosyası render edilir. İkisi aynı tabloda bulunabilir.

Route tablosu boşsa eski davranış sürer: $app.document.add($doc) ile eklenen tek belge / adresinde sunulur. Tablo doluysa eşleşmeyen yol 404 döner.

Desenler#

DesenEşleşir$req.params
//
/giris/giris, /giris/
/urun/:id/urun/42{id: "42"}
/a/:x/b/:y/a/1/b/2{x: "1", y: "2"}
/dosya/*yol/dosya/a/b/c{yol: "a/b/c"}

* yalnızca desenin sonunda olabilir ve kalan yolu tümden yakalar.

Deneme sırası yazım sırasından bağımsızdır: önce sabit segmenti çok olan desenler, en sonda * içerenler denenir. /urun/yeni ile /urun/:id birlikte yazıldığında hangisinin önce geldiği fark etmez.

Aynı yol iki kez tanımlanırsa hata verilir.

Parametreler#

LexerLang
$req.params.id            # eksikse hata
$req.param("id")          # eksikse null

$res — yanıt#

ÇağrıEtkisi
$res.document($doc)sayfa sunar: düzen uygulanır, script gömülür, minify çalışır
$res.send($deger)gövdeyi belirler; html_document da verilebilir
$res.json($deger)JSON gövde + application/json
$res.status($kod)durum kodu (100–599)
$res.redirect($adres)302
$res.redirect($adres, 301)kalıcı yönlendirme (300–399)
$res.header($ad, $deger)yanıt başlığı
$res.cookie($ad, $deger, {...})çerez

document ile send aynı işi yapar, ayrım niyettedir: send bir gövde gönderir (metin, ham HTML, JSON), document bir sayfa sunar. document belge dışında bir şey kabul etmez — metin verildiğinde sessizce düzensiz sayfa dönmesindense hata vermesi doğrudur.

İşleyici send, document ya da redirect çağırmadan biterse hata verilir — sessizce boş bir sayfa dönmez. İkinci bir send de hatadır: HTTP'de tek bir yanıt vardır.

Yönlendirme adresinde satır sonu reddedilir; geçseydi yanıta yeni bir başlık satırı eklenebilirdi.

İşleyici hangi bağlamda çalışır#

Sayfa her istekte baştan çalışır, sonra eşleşen işleyici o çalıştırmanın kendi bağlamıyla çağrılır. Bu yüzden isteğe özel üretilen modüller (oturum gibi) doğru örneği görür:

LexerLang
$redis = new redis({host: "localhost", port: 6379}).connect()
session.redis = $redis
session.start()                    # her istekte, işleyicilerden önce

$app.routes.add({
    "/": func($req, $res) as void
        $res.send(session.get("user_id"))
    end func
})

Parça sayfaya veri geçirme#

Dahil edilen dosya çağıranın değişkenlerini görmez. Değer geçirmenin yolu set_data'dır; dosya bunu $data adıyla görür:

LexerLang
"/hakkinda/:id": func($req, $res) as void
    $sayfa = new html_document
    $sayfa.set_data({id: $req.params.id})
    $sayfa = $sayfa.from_file(path.pwd + "/hakkinda.lx")
    $res.send($sayfa.to_string())
end func
LexerLang
# hakkinda.lx
$doc.body.add(`<p>kimlik: ` + $data.id + `</p>`)

$data verilmeden kullanılırsa hata verir; sessizce boş geçmez.

Sırada#

Belge ve düzen.