28

Full-Stack Web Framework Written in Nim

 4 years ago
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.
neoserver,ios ssh client

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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK