-
-
Notifications
You must be signed in to change notification settings - Fork 47
/
index.md
129 lines (89 loc) · 4.23 KB
/
index.md
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
![Build Status](https://github.com/planety/prologue/workflows/Test%20Prologue/badge.svg)
[![License: BSD-3-Clause](https://img.shields.io/github/license/planety/prologue)](https://opensource.org/licenses/BSD-3-Clause)
[![Version](https://img.shields.io/github/v/release/planety/prologue?include_prereleases)](https://github.com/planety/prologue/releases)
[![buy me a coffee](https://img.shields.io/badge/donate-buy%20me%20a%20coffee-orange.svg)](https://github.com/planety/prologue#donations)
# Prologue
What's past is prologue.
## Purpose
`Prologue` is a powerful and flexible web framework written in Nim.
It is ideal for building elegant and high performance web services.
**Reduce magic. Reduce surprise.**
## Documentation
<table class="tg">
<tbody>
<tr>
<td class="tg-0pky">Documentation</td>
<td class="tg-c3ow" colspan="2"><a href="https://planety.github.io/prologue" target="_blank" rel="noopener noreferrer">Index Page</a></td>
</tr>
<tr>
<td class="tg-c3ow">Core API</td>
<td class="tg-0pky"><a href="https://planety.github.io/prologue/coreapi/theindex.html" target="_blank" rel="noopener noreferrer">Index Page</a></td>
<td class="tg-0pky"><a href="https://planety.github.io/prologue/coreapi/application.html" target="_blank" rel="noopener noreferrer">Search Page</a></td>
</tr>
<tr>
<td class="tg-c3ow">Full API</td>
<td class="tg-0pky"><a href="https://planety.github.io/prologue/plugin/theindex.html" target="_blank" rel="noopener noreferrer">Index Page</a></td>
<td class="tg-0pky"><a href="https://planety.github.io/prologue/plugin/plugin.html" target="_blank" rel="noopener noreferrer">Search Page</a></td>
</tr>
</tbody>
</table>
## Installation
First you should install [Nim](https://nim-lang.org/) language which is an elegant and high performance language. Follow the [instructions](https://nim-lang.org/install.html) and set environment variables correctly.
Then you can use `nimble` command to install prologue.
```bash
nimble install prologue
```
`Prologue` also provides some extensions. You can use `logue extension` to install all of them. If you just want to install one of them, you can use `logue extension module` for example `logue extension redis`.
## Usage
### Hello World
```nim
# app.nim
import prologue
proc hello*(ctx: Context) {.async.} =
resp "<h1>Hello, Prologue!</h1>"
let app = newApp()
app.addRoute("/", hello)
app.run()
```
Run **app.nim** ( `nim c -r app.nim` ). Now the server is running at `localhost:8080`.
### Another example
```nim
# app.nim
import prologue
import prologue/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 = "Prologue")
var app = newApp(settings = settings)
app.use(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, middlewares = @[debugRequestMiddleware()])
app.addRoute("/hello/{name}", helloName, HttpGet)
app.run()
```
Run **app.nim** (`nim c -r app.nim`). Now the server is running at `localhost:8080`.
### More examples
- [HelloWorld](https://github.com/planety/prologue/tree/devel/examples/helloworld)
- [ToDoList](https://github.com/planety/prologue/tree/devel/examples/todolist)
- [ToDoApp](https://github.com/planety/prologue/tree/devel/examples/todoapp)
- [Blog](https://github.com/planety/prologue/tree/devel/examples/blog)
- [Additional examples repository](https://github.com/planety/prologue-examples)
### Extensions
If you need more extensions, you can refer to [awesome prologue](https://github.com/planety/awesome-prologue) and [awesome nim](https://github.com/ringabout/awesome-nim#web).
## Donations
Thanks for supporting me.
https://github.com/sponsors/planety
## Stars
[![Stargazers over time](https://starchart.cc/planety/prologue.svg)](https://starchart.cc/planety/prologue)