İlk sunucunuz
On satırlık bir dosyadan çalışan bir siteye; --watch, yönlendirme ve ortak düzen.
Bir dizin açın ve içine app.lexer adında bir dosya koyun.
package merhaba
use http_server, html_document
$app = new http_server
$doc = new html_document
$doc.title = 'Merhaba'
$doc.body.add(`<h1>Merhaba Dünya</h1>`)
with $app
.document.add($doc)
.listen({port: 3000})
end withÇalıştırın:
lexer serve app.lexer --watchhttp://localhost:3000 adresini açın. Dosyayı kaydettiğinizde sunucu nazikçe kapanıp yeniden kalkar; tarayıcıyı yenilemeniz yeterli.
Satır satır#
package merhaba — her dosya bir paket adıyla başlar.
use http_server, html_document — kullanılacak yerleşik modüller. İçe aktarılmayan bir modülün adı tanınmaz.
$app = new http_server — sunucu nesnesi. Değişkenler $ ile başlar.
$doc.body.add(...) — backtick bloğu ham HTML üretir. Araya giren değerler kaçışlanır, etiketler ham kalır.
with $app ... end with — aynı nesne üzerinde art arda çağrı. $app. diye tekrar yazmaya gerek kalmıyor.
Birden çok sayfa#
Tek belge yerine bir yönlendirme tablosu kurulduğunda / dışındaki adresler de yanıt verir:
package site
use http_server, html_document
$app = new http_server({port: 3000})
$app.routes.add({
"/": func($req, $res) as void
$doc = new html_document
$doc.title = 'Ana sayfa'
$doc.body.add(`<h1>Ana sayfa</h1>`)
$res.document($doc)
end func
"/urun/:id": func($req, $res) as void
$doc = new html_document
$doc.title = 'Ürün'
$doc.body.add(`<h1>Ürün ` + $req.params.id + `</h1>`)
$res.document($doc)
end func
})
$app.listen()/urun/42 adresinde $req.params.id değeri "42" olur. Eşleşmeyen bir adres 404 döner.
İşleyici send, document ya da redirect çağırmadan biterse hata verir — sessizce boş bir sayfa dönmez.
Ortak düzen#
Her sayfada tekrarlanan <head> ve sayfa çerçevesi ayrı bir dosyada durur:
# layout.lx
package layout
use html_document
$doc = new html_document
$doc.type = html_document.types.LAYOUT
$doc.head.add(`<link rel="stylesheet" href="/public/site.css">`)
$doc.body.add(`<header>Sitem</header><main>${children}</main>`)$app.layout(path.pwd + "/layout.lx")${children} sayfanın kendi gövdesinin geleceği yerdir. Düzen yalnızca $res.document($doc) ile sunulan sayfalara uygulanır; $res.send() ham gövde gönderir ve düzenden geçmez.
Statik dosyalar#
$app.static({url_path: "/public", directory: path.pwd + "/public"})public/site.css dosyası /public/site.css adresinden sunulur.
Arka planda çalıştırmak#
lexer serve app.lexer --backgroundSüreç terminalden ayrılır ve out() çıktısı çalışma dizinindeki .logs/ altına yazılır. Çalışanları görmek ve durdurmak için:
lexer status
lexer logs <pid> --follow
lexer stop <pid>Üretim kipi#
lexer serve app.lexer --productionHata ayrıntısı tarayıcıdan kalkar; yalnızca bir olay kimliği döner, ayrıntı log dosyasına yazılır. Kip dilin içinden de okunabilir:
use modes
if mode == modes.development then
out("geliştirme")
end ifSırada#
lexer serve bayraklarıyla birlikte, ve sözdizimi.