From 7db107d070ff7c853dda50201954e8c40c07b6e9 Mon Sep 17 00:00:00 2001 From: unwox Date: Fri, 27 Dec 2024 17:10:01 +0600 Subject: add an example site code --- example/main.lua | 103 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 103 insertions(+) create mode 100644 example/main.lua (limited to 'example/main.lua') diff --git a/example/main.lua b/example/main.lua new file mode 100644 index 0000000..98e3ea8 --- /dev/null +++ b/example/main.lua @@ -0,0 +1,103 @@ +-- a helper for handling API results: throws an error if the call +-- was unsuccessful, otherwise returns the result +function must(...) + local ok, result = ... + if not ok then + error(result) + end + return result +end + +-- open a database connection +local db = must(luna.db.open("file:db.sqlite?_journal=WAL&_sync=NORMAL")) +must(luna.db.exec(db, [[ + CREATE TABLE IF NOT EXISTS hits(creation_time DATETIME NOT NULL); +]], {})) + +-- register a GET / route that displays a home page for the example site +luna.router.route("GET /", function (request) + local response = "{\"method\": \"" .. request.method .. "\"" + response = response .. ", \"path\": \"" .. request.path .. "\"}" + + return 200, {["Content-Type"] = "text/html"}, [[ + + + + A simple example of website made for luna + + + +
+

Wow! A simple website made for luna?

+ +
+ + ]] +end) + +-- register a GET /json route and return some request data in response +luna.router.route("GET /json", function (request) + local response = "{\"method\": \"" .. request.method .. "\"" + response = response .. ", \"path\": \"" .. request.path .. "\"}" + + return 200, {["Content-Type"] = "application/json"}, response +end) + +-- register a GET /db route. visiting it writes a hit to the database and +-- displays visits count +luna.router.route("GET /db", function (request) + local ok, err = luna.db.exec( + db, + "INSERT INTO hits VALUES (?)", + {os.date("%Y-%m-%d %H:%M:%S")} + ) + if not ok then + return 500, + {["Content-Type"] = "application/json"}, + "error while saving to db: " .. err + end + local ok, res = luna.db.query(db, "SELECT COUNT(*) FROM hits", {}) + if not ok then + return 500, + {["Content-Type"] = "application/json"}, + "error while querying db: " .. res + end + return 200, {["Content-Type"] = "text/html"}, "Hits: " .. tostring(res[1][1]) +end) + +-- register a GET /request route. when visited makes an HTTP-request to +-- https://ifconfig.me service and displays the result +luna.router.route("GET /request", function () + local ok, response = luna.http.request("GET", "https://ifconfig.me", {}, "") + if not ok then + return 500, + {["Content-Type"] = "application/json"}, + "error while fetching data from ifconfig.me: " .. response + end + return 200, {}, "Your IP is: " .. response.body +end) + +-- serve static files from static/ directory +luna.router.static("GET /static/", "static/") + +-- register a custom eval handler that will evaluate whatever is passed into +-- luna stdio when it's run with -D flag. in this case we print the result of +-- evaluation. eval handler is evaluated once for each worker so the result +-- may be printed more than once +luna.evalfn(function (text) + local res = loadstring(text) + print(res) +end) -- cgit v1.2.3