Yönlendirme
$app.routes.add, desenler, parametreler ve $res üzerinden yanıt.
$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#
| Desen | Eş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#
$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:
$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:
"/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# hakkinda.lx
$doc.body.add(`<p>kimlik: ` + $data.id + `</p>`)$data verilmeden kullanılırsa hata verir; sessizce boş geçmez.