lune/.lune/http_server.luau

54 lines
1.3 KiB
Text
Raw Normal View History

2023-02-05 16:36:57 +00:00
--> A basic http server that echoes the given request
--> body at /ping and otherwise responds 404 "Not Found"
local net = require("@lune/net")
local process = require("@lune/process")
local task = require("@lune/task")
local PORT = if process.env.PORT ~= nil and #process.env.PORT > 0
then assert(tonumber(process.env.PORT), "Failed to parse port from env")
else 8080
-- Create our responder functions
local function pong(request: net.ServeRequest): string
2023-02-05 04:49:51 +00:00
return `Pong!\n{request.path}\n{request.body}`
end
local function teapot(_request: net.ServeRequest): net.ServeResponse
return {
2023-02-05 04:49:51 +00:00
status = 418,
body = "🫖",
}
end
local function notFound(_request: net.ServeRequest): net.ServeResponse
return {
status = 404,
body = "Not Found",
}
end
-- Run the server on port 8080
local handle = net.serve(PORT, function(request)
2023-02-05 04:49:51 +00:00
if string.sub(request.path, 1, 5) == "/ping" then
return pong(request)
2023-02-05 04:49:51 +00:00
elseif string.sub(request.path, 1, 7) == "/teapot" then
return teapot(request)
else
return notFound(request)
end
end)
print(`Listening on port {PORT} 🚀`)
-- Exit our example after a small delay, if you copy this
-- example just remove this part to keep the server running
task.delay(2, function()
print("Shutting down...")
task.wait(1)
handle.stop()
end)