prologue/core/application

Procs

proc registerErrorHandler(app: Prologue; code: HttpCode; handler: ErrorHandler) {...}{.
    inline, raises: [Exception], tags: [RootEffect].}
Registers a user-defined error handler. You can specify HttpCode and its corresponding handler. For example, if response's HttpCode is euqal to this, Framework will execute corresponding function.   Source Edit
proc registerErrorHandler(app: Prologue; code: set[HttpCode]; handler: ErrorHandler) {...}{.
    inline, raises: [Exception], tags: [RootEffect].}
Register the same handler for a set of HttpCode.   Source Edit
proc registerErrorHandler(app: Prologue; code: openArray[HttpCode];
                         handler: ErrorHandler) {...}{.inline, raises: [Exception],
    tags: [RootEffect].}
Register the same handler for a sequence of HttpCode. This is a helper function.

Example:

## Examples for all registerErrorHandler
proc go404*(ctx: Context) {.async.} =
  resp "Something wrong!"

proc go20x*(ctx: Context) {.async.} =
  resp "Ok!"

proc go30x*(ctx: Context) {.async.} =
  resp "EveryThing else?"

let settings = newSettings()
var app = newApp(settings)
app.registerErrorHandler(Http404, go404)
app.registerErrorHandler({Http200 .. Http204}, go20x)
app.registerErrorHandler(@[Http301, Http304, Http307], go30x)

doAssert app.errorHandlerTable[Http404] == go404
doAssert app.errorHandlerTable[Http202] == go20x
doAssert app.errorHandlerTable[Http304] == go30x
  Source Edit
proc newSettings(settings: Settings; localSettings: LocalSettings): Settings {...}{.inline,
    raises: [], tags: [].}
Creates a new settings.
Params:
  • settings is a global immutable setting for all handlers.
  • localSettings is a local immutable setting for corresponding handler or handler group.
  Source Edit
proc addRoute(app: Prologue; route: Regex; handler: HandlerAsync; httpMethod = HttpGet;
             middlewares: seq[HandlerAsync] = @[]; settings: LocalSettings = nil) {...}{.
    inline, raises: [], tags: [].}

Adds a single regex route with handler and don't check whether route is duplicated.

Notes: The framework will automatically register HttpHead method, if HttpMethod is HttpGet.

  Source Edit
proc addRoute(app: Prologue; route: Regex; handler: HandlerAsync;
             httpMethod: seq[HttpMethod]; middlewares: seq[HandlerAsync] = @[];
             settings: LocalSettings = nil) {...}{.inline, raises: [], tags: [].}
Adds a single regex route and handler, but supports a set of HttpMethod.   Source Edit
proc addRoute(app: Prologue; route: string; handler: HandlerAsync;
             httpMethod = HttpGet; name = ""; middlewares: seq[HandlerAsync] = @[];
             settings: LocalSettings = nil) {...}{.inline,
    raises: [DuplicatedRouteError, ValueError, DuplicatedReversedRouteError],
    tags: [].}

Adds a single route and handler. It checks whether route is duplicated.

Notes: The framework will automatically register HttpHead method, if HttpMethod is HttpGet.

  Source Edit
proc addRoute(app: Prologue; route: string; handler: HandlerAsync;
             httpMethod: seq[HttpMethod]; name = "";
             middlewares: seq[HandlerAsync] = @[]; settings: LocalSettings = nil) {...}{.
    inline,
    raises: [DuplicatedReversedRouteError, ValueError, DuplicatedRouteError],
    tags: [].}
Adds a single regex route and handler, but supports a set of HttpMethod. It also checks whether route is duplicated   Source Edit
proc addRoute(app: Prologue; patterns: seq[UrlPattern]; baseRoute = "";
             settings: LocalSettings = nil) {...}{.inline, raises: [
    DuplicatedReversedRouteError, ValueError, DuplicatedRouteError, Exception],
    tags: [RootEffect].}
Adds multiple routes with handlers.   Source Edit
proc head(app: Prologue; route: string; handler: HandlerAsync; name = "";
         middlewares: sink seq[HandlerAsync] = @[]; settings: LocalSettings = nil) {...}{.
    inline,
    raises: [DuplicatedRouteError, ValueError, DuplicatedReversedRouteError],
    tags: [].}
Adds route and handler with HttpHead.   Source Edit
proc get(app: Prologue; route: string; handler: HandlerAsync; name = "";
        middlewares: sink seq[HandlerAsync] = @[]; settings: LocalSettings = nil) {...}{.
    inline,
    raises: [DuplicatedRouteError, ValueError, DuplicatedReversedRouteError],
    tags: [].}
Adds route and handler with HttpGet and HttpHead.   Source Edit
proc post(app: Prologue; route: string; handler: HandlerAsync; name = "";
         middlewares: sink seq[HandlerAsync] = @[]; settings: LocalSettings = nil) {...}{.
    inline,
    raises: [DuplicatedRouteError, ValueError, DuplicatedReversedRouteError],
    tags: [].}
Adds route and handler with HttpPost.   Source Edit
proc put(app: Prologue; route: string; handler: HandlerAsync; name = "";
        middlewares: sink seq[HandlerAsync] = @[]; settings: LocalSettings = nil) {...}{.
    inline,
    raises: [DuplicatedRouteError, ValueError, DuplicatedReversedRouteError],
    tags: [].}
Adds route and handler with HttpPut.   Source Edit
proc delete(app: Prologue; route: string; handler: HandlerAsync; name = "";
           middlewares: sink seq[HandlerAsync] = @[]; settings: LocalSettings = nil) {...}{.
    inline,
    raises: [DuplicatedRouteError, ValueError, DuplicatedReversedRouteError],
    tags: [].}
Adds route and handler with HttpDelete.   Source Edit
proc trace(app: Prologue; route: string; handler: HandlerAsync; name = "";
          middlewares: sink seq[HandlerAsync] = @[]; settings: LocalSettings = nil) {...}{.
    inline,
    raises: [DuplicatedRouteError, ValueError, DuplicatedReversedRouteError],
    tags: [].}
Adds route and handler with HttpTrace.   Source Edit
proc options(app: Prologue; route: string; handler: HandlerAsync; name = "";
            middlewares: sink seq[HandlerAsync] = @[]; settings: LocalSettings = nil) {...}{.
    inline,
    raises: [DuplicatedRouteError, ValueError, DuplicatedReversedRouteError],
    tags: [].}
Adds route and handler with HttpOptions.   Source Edit
proc connect(app: Prologue; route: string; handler: HandlerAsync; name = "";
            middlewares: sink seq[HandlerAsync] = @[]; settings: LocalSettings = nil) {...}{.
    inline,
    raises: [DuplicatedRouteError, ValueError, DuplicatedReversedRouteError],
    tags: [].}
Adds route and handler with HttpConnect.   Source Edit
proc patch(app: Prologue; route: string; handler: HandlerAsync; name = "";
          middlewares: sink seq[HandlerAsync] = @[]; settings: LocalSettings = nil) {...}{.
    inline,
    raises: [DuplicatedRouteError, ValueError, DuplicatedReversedRouteError],
    tags: [].}
Adds route and handler with HttpPatch.   Source Edit
proc all(app: Prologue; route: string; handler: HandlerAsync; name = "";
        middlewares: sink seq[HandlerAsync] = @[]; settings: LocalSettings = nil) {...}{.
    inline,
    raises: [DuplicatedReversedRouteError, ValueError, DuplicatedRouteError],
    tags: [].}
Adds route and handler with all HttppMethod.   Source Edit
proc printRoute(app: Prologue) {...}{.inline, raises: [], tags: [].}
A helper function for printing all route names.   Source Edit
proc appAddress(app: Prologue): string {...}{.inline, raises: [], tags: [].}
Gets the address from the settings.   Source Edit
proc appDebug(app: Prologue): bool {...}{.inline, raises: [], tags: [].}
Gets the debug attributes from the settings.   Source Edit
proc appName(app: Prologue): string {...}{.inline, raises: [], tags: [].}
Gets the appName attributes from the settings.   Source Edit
proc appPort(app: Prologue): Port {...}{.inline, raises: [], tags: [].}
Gets the port from the settings.   Source Edit
proc newApp(settings: Settings; middlewares: sink seq[HandlerAsync] = @[];
           startup: sink seq[Event] = @[]; shutdown: sink seq[Event] = @[];
           errorHandlerTable = DefaultErrorHandler;
           appData = newStringTable(mode = modeCaseSensitive)): Prologue {...}{.inline,
    raises: [ValueError], tags: [].}
Creates a new App instance.
Params:
  • settings is a global immutable setting which is visible all handlers.
  • middlewares is a global middlewares collections.
  • startup is used to execute tasks before the application starts.
  • shutdown is used to execute tasks after the application stops.
  • errorHandlerTable stores Httpcodes and corresponding handlers.
  • appData is a global user-defined data.
  Source Edit
proc run(app: Prologue) {...}{.raises: [Exception, ValueError, OSError,
                               IOSelectorsException, KeyError], tags: [RootEffect,
    TimeEffect, WriteIOEffect, ReadIOEffect, ReadDirEffect].}
Starts an Application.   Source Edit

Exports

Request, charset, initRequest, url, setScheme, contentType, query, port, beast/request, request, getCookie, send, scheme, stripPath, body, close, respond, respond, headers, secure, path, reqMethod, NativeRequest, hostName, serve, Prologue, server, newPrologue, beast/server, basicregex, parseStringTable, types, FormPart, getPrologueEnv, parseStringTable, existsPrologueEnv, contains, $, $, BaseType, $, initEnv, dumps, values, hasKey, Session, del, Env, initSession, pairs, SecretUrl, getOrDefault, delPrologueEnv, EmptySecretKeyError, parseValue, clear, setPrologueEnv, loads, []=, putPrologueEnv, writePrologueEnv, update, getOrDefault, []=, len, len, initFormPart, getAllPrologueEnv, keys, get, [], configure, EnvWrongFormatError, loadPrologueEnv, BadSecretKeyError, SecretKey, EnvError, [], [], PrologueVersion, ProloguePrefix, constants, SyncEvent, attachment, newErrorHandlerTable, staticFileResponse, multiMatch, save, PathHandler, AsyncEvent, ReRouter, context, gScope, getPostParams, addHeader, RePath, hasHeader, getSettings, Router, multiMatch, UploadFile, handle, ErrorHandlerTable, initEvent, urlFor, ErrorHandler, defaultHandler, HandlerAsync, Path, default500Handler, getQueryParams, setHeader, getPathParams, setResponse, ReversedRouter, setCookie, Event, deleteCookie, initEvent, getPathParams, initUploadFile, abortExit, send, setResponse, Context, getUploadFile, newErrorHandlerTable, GlobalScope, getCookie, setHeader, respond, default404Handler, newReversedRouter, newContext, setCookie, urlsafeBase64Encode, base64Encode, urlsafeBase64Decode, encode, base64Encode, base64Decode, urlsafeBase64Encode, switch, middlewaresbase, doNothingClosureMiddleware, newLocalSettings, newSettings, newSettings, newLocalSettings, CtxSettings, nativesettings, newCtxSettings, hasKey, LocalSettings, getOrDefault, Settings, newSettings, [], errorPage, multiPartPage, internalServerErrorPage, loginPage, pages, $, initResponse, plainTextResponse, redirect, resp, setHeader, htmlResponse, response, setCookie, setHeader, setCookie, abort, resp, jsonResponse, Response, error404, addHeader, deleteCookie, hasHeader, route, initPath, newReRouter, stripRoute, pattern, PrologueError, items, RouteResetError, UrlPattern, initRePath, hasKey, hash, []=, add, newPathHandler, DuplicatedRouteError, DuplicatedReversedRouteError, RouteError, findHandler, newRouter, pattern, pairs, [], EmptySecretKeyError, parseValue, clear, []=, types, BadSecretKeyError, FormPart, parseStringTable, update, getOrDefault, []=, $, len, BaseType, initFormPart, len, parseStringTable, dumps, $, Session, del, initSession, SecretKey, [], loads, SecretUrl, [], randomBytesSeq, randomSecretKey, DefaultEntropy, urandom, randomString, sinceApi, since, utils, beforeApi, isStaticFile