프롤로그: Nim으로 작성된 강력한 웹 프레임워크
22854 단어 webframeworknim
Prologue v0.4.0
가 출시되었음을 알려드리게 되어 자랑스럽습니다!Prologue은 Nim 언어로 작성된 강력하고 확장 가능한 웹 프레임워크입니다.
설치
님 버전 >= 1.4.0 Installation
Prologue
버전 >= 0.4.0nimble install [email protected]
이번 릴리스의 새로운 기능을 살펴보겠습니다!
강력한 라우팅 시스템
Prologue
가 네스트 라우팅 시스템으로 전환했습니다.와일드카드 지원
Prologue
는 이제 하나의 URL 섹션과 일치할 수 있는 와일드카드( *
) 문자를 지원합니다.import prologue
proc hello*(ctx: Context) {.async.} =
resp "Hello, Prologue"
var app = newApp()
app.get("/static/*", hello)
app.get("/*/static", hello)
app.get("/static/templates/{path}/*", hello)
app.run()
탐욕스러운 지원
Prologue
는 이제 URL 끝에 있어야 하는 greedy( $
) 문자를 지원합니다. 탐욕스러운 캐릭터는 이전 섹션이 일치하는 경우 나머지 URL 섹션을 모두 일치시킵니다.import prologue
proc hello*(ctx: Context) {.async.} =
resp "Hello, Prologue"
var app = newApp()
app.get("/test/{param}$", hello)
app.get("/test/static/*$", hello)
app.run()
그룹화 지원
Prologue
는 이제 그룹화 라우팅을 지원합니다.import prologue
import std/with
var
app = newApp()
base = newGroup(app, "/apiv2", @[])
level1 = newGroup(app,"/level1", @[], base)
level2 = newGroup(app, "/level2", @[], level1)
level3 = newGroup(app, "/level3", @[], level2)
proc hello(ctx: Context) {.async.} =
resp "Hello"
proc hi(ctx: Context) {.async.} =
resp "Hi"
proc home(ctx: Context) {.async.} =
resp "Home"
with base:
get("/hello", hello)
get("/hi", hi)
post("/home", home)
# /apiv2/level1/hello
with level1:
get("/hello", hello)
get("/hi", hi)
post("/home", home)
# /apiv2/level1/level2/hello
with level2:
get("/hello", hello)
get("/hi", hi)
post("/home", home)
# /apiv2/level1/level2/level3/hello
with level3:
get("/hello", hello)
get("/hi", hi)
post("/home", home)
app.run()
Prologue
는 URL 패턴 그룹화도 지원합니다.import prologue
var
app = newApp()
base = newGroup(app, "/apiv2", @[])
level1 = newGroup(app,"/level1", @[], base)
level2 = newGroup(app, "/level2", @[], level1)
proc hello(ctx: Context) {.async.} =
resp "Hello"
proc hi(ctx: Context) {.async.} =
resp "Hi"
proc home(ctx: Context) {.async.} =
resp "Home"
let
urlpattern1 = @[pattern("/hello", hello), pattern("/hi", hi)]
urlpattern2 = @[pattern("/home", home)]
tab = {level1: urlpattern1, level2: urlpattern2}
app.addGroup(tab)
app.run()
확장 가능한 구성 요소
웹소켓 지원
에코 서버 예:
import prologue
import prologue/websocket
proc hello*(ctx: Context) {.async.} =
var ws = await newWebSocket(ctx)
await ws.send("Welcome to simple echo server")
while ws.readyState == Open:
let packet = await ws.receiveStrPacket()
await ws.send(packet)
resp "<h1>Hello, Prologue!</h1>"
var app = newApp()
app.get("/ws", hello)
app.run()
정적 파일 미들웨어
정적 파일 서비스는 이제 미들웨어입니다.
import prologue
import prologue/middlewares/staticfile
var app = newApp()
app.use(staticFileMiddleware("templates"))
app.run()
사용자 정의 컨텍스트
컨텍스트 확장
사용자는 자신의 컨텍스트 개체를 정의할 수 있습니다.
import prologue
import strformat
type
UserContext = ref object of Context
data: int
proc hello*(ctx: Context) {.async.} =
inc ctx.UserContext.data
echo fmt"{ctx.UserContext.data = }"
resp "<h1>Hello, Prologue!</h1>"
var app = newApp()
app.use(extendContextMiddleWare(UserContext))
app.get("/", hello)
app.run()
미들웨어
사용자는 자신의 컨텍스트 개체에 대한 미들웨어를 정의할 수 있습니다.
import prologue
import strformat
type
UserContext = ref object of Context
data: int
ExperimentContext = concept ctx
ctx is Context
ctx.data is int
proc experimentMiddleware[T: ExperimentContext](ctxType: typedesc[T]): HandlerAsync =
mixin await
result = proc(ctx: Context) {.async.} =
inc ctx.ctxType.data
echo fmt"{ctx.ctxType.data = }"
await switch(ctx)
proc hello*(ctx: Context) {.async.} =
inc ctx.UserContext.data
echo fmt"{ctx.UserContext.data = }"
resp "<h1>Hello, Prologue!</h1>"
var app = newApp()
app.use(extendContextMiddleWare(UserContext))
app.use(experimentMiddleware(UserContext))
app.get("/", hello)
app.run()
자원
추가 예시 저장소
@keshon 덕분에
https://github.com/planety/prologue-examples
선적 서류 비치
선적 서류 비치
Index Page
핵심 API
Index Page
Search Page
전체 API
Index Page
Search Page
지원하다
어썸님: https://github.com/xflywind/awesome-nim
멋진 프롤로그: https://github.com/planety/awesome-prologue
디스코드 서버
Prologue
에 관심이 있거나 Prologue
에 대해 자세히 알아보려면 discord server에 가입하세요.
Reference
이 문제에 관하여(프롤로그: Nim으로 작성된 강력한 웹 프레임워크), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/xflywind/prologue-a-powerful-web-framework-written-in-nim-1n54텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)