İçeriğe geç
LexerLangv0.1.0

İ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.

LexerLang
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:

Terminal
lexer serve app.lexer --watch

http://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:

LexerLang
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:

LexerLang
# 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>`)
LexerLang
$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#

LexerLang
$app.static({url_path: "/public", directory: path.pwd + "/public"})

public/site.css dosyası /public/site.css adresinden sunulur.

Arka planda çalıştırmak#

Terminal
lexer serve app.lexer --background

Sü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:

Terminal
lexer status
lexer logs <pid> --follow
lexer stop <pid>

Üretim kipi#

Terminal
lexer serve app.lexer --production

Hata 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:

LexerLang
use modes

if mode == modes.development then
    out("geliştirme")
end if

Sırada#

lexer serve bayraklarıyla birlikte, ve sözdizimi.