The query string would be encoded in the HTTP body on the POST method.
There’s only a slight difference when you pass query string by POST instead of with GET: you don’t need a URL rule using a regex, so the "?" is unnecessary here.
(post "/there" #:from-post 'qstr
(lambda (rc)
(:from-post rc 'get "name")))
Please notice that #:from-post 'qstr is necessary when you’re trying to get data from POST. And you should use :from-post to get related data from query-string.
#:from-post <mode>
The mode includes:
#t or 'qstr: handle query-string for you.
'json: returns a parsed json as hashtable.
'qstr-safe: similar to ’qstr, but try to eliminate evil HTML entities first.
'bv: returns the body as bytevector.
'store rest ...: It’s for Upload files.
The reason to design :from-post is for the efficient purpose. Artanis will not try to auto parse POST body as query-string for at least 2 reasons:
useful to avoid redundant parsing. However, each time you call :from-post, it will parse the query-string again, the correct way to fetch multiple values is:
(:from-post rc 'get-vals "key1" "key2" "key3")
;; For example:
;; let-values is imported from srfi-11
(let-values (((title sub-title old-passwd new-passwd)
(:from-post rc 'get-vals "title" "sub-title"
"old-passwd" "new-passwd")))
..........
)
BTW, you may get the parsed query-string as an assoc-list as well:
(let ((qstr (:from-post rc 'get))) (assoc-ref qstr "key-1"))