

Full-Stack Web Framework Written in Nim
source link: https://github.com/planety/prologue
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Prologue
What's past is prologue.
Purpose
Prologue is a Full-Stack Web Framework which is ideal for building elegant and high performance web services.
Reduce magic. Reduce surprise.
Current Work
Now we are working on rewriting network infrastructure.
https://github.com/iocrate/netkit
Also working on http2.
https://github.com/nimlight/zest
Documentation
You can read documentation in https://planety.github.io/prologue .
Feature
-
Core
- Base on httpbeast and asynchttpserver
- Configure and Settings
- Context
- Param and Query Data
- Form Data
- Static Files
- Middleware
- Simple Route
- Regex Route
- CORS Response
- Signing
- Cookie
- Session
- Cache
- Startup and Shutdown Events
- URL Building
- Data Validation
- Exception Handler
- Cross-Site Request Forgery
- Cross-Site Scripting (XSS) Protection(Karax quote string automatically)
- Clickjacking Protection
- Authentication
- I18n
-
Plugin
- Minimal OpenApi support
- Template(Using Karax Native)
- Test Client(Using httpclient)
Installation
First you should install Nim language which is an elegant and high performance language.Follow the instructions and set environment variables correctly.
Then you can use nimble
command to install prologue.
nimble install prologue
Usage
Hello World
# app.nim import prologue proc hello*(ctx: Context) {.async.} = resp "<h1>Hello, Prologue!</h1>" let settings = newSettings() var app = newApp(settings = settings) app.addRoute("/", hello) app.run()
Run app.nim .Now the server is running at localhost:8080.
Another example
# app.nim import prologue import prologue/middlewares/middlewares # Async Function proc home*(ctx: Context) {.async.} = resp "<h1>Home</h1>" proc helloName*(ctx: Context) {.async.} = resp "<h1>Hello, " & ctx.getPathParams("name", "Prologue") & "</h1>" proc doRedirect*(ctx: Context) {.async.} = resp redirect("/hello") proc login*(ctx: Context) {.async.} = resp loginPage() proc do_login*(ctx: Context) {.async.} = resp redirect("/hello/Nim") let settings = newSettings(appName = "StarLight") var app = newApp(settings = settings, middlewares = @[debugRequestMiddleware()]) app.addRoute("/", home, @[HttpGet, HttpPost]) app.addRoute("/home", home, HttpGet) app.addRoute("/redirect", doRedirect, HttpGet) app.addRoute("/login", login, HttpGet) app.addRoute("/login", do_login, HttpPost, @[debugRequestMiddleware()]) app.addRoute("/hello/{name}", helloName, HttpGet) app.run()
Run app.nim .Now the server is running at localhost:8080.
More examples
Stars
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK