web/server: routing basically working
This commit is contained in:
parent
833c6d7578
commit
1f3247e1e3
4 changed files with 18 additions and 9 deletions
|
@ -8,7 +8,8 @@
|
|||
:class 'server:config
|
||||
:port "8899"
|
||||
:routes
|
||||
`((nil server:fileserver
|
||||
`((("api") server:message-handler)
|
||||
(() server:fileserver
|
||||
:doc-root ,(t:test-path "" "docs")))))))
|
||||
|
||||
(let ((cfg (config:add *config* :client
|
||||
|
|
|
@ -25,7 +25,7 @@
|
|||
(test-server-config server)
|
||||
(sleep 0.1)
|
||||
(test-fileserver client)
|
||||
;(test-message client)
|
||||
(test-message client)
|
||||
(sleep 0.1)
|
||||
(server:stop (core:find-service :server))
|
||||
(t:show-result))))
|
||||
|
|
|
@ -26,5 +26,9 @@
|
|||
|
||||
(defun send-message (ctx msg)
|
||||
(let* ((cfg (core:config ctx))
|
||||
(url (str:concat (base-url cfg) (api-path cfg) (message:head-as-list msg))))
|
||||
(url (str:concat (base-url cfg) (api-path cfg) (msgpath msg))))
|
||||
(dex:get url)))
|
||||
|
||||
(defun msgpath (msg)
|
||||
(let ((lst (loop for p in (message:head-as-list msg) when p collect p)))
|
||||
(str:join "/" (mapcar #'string-downcase lst))))
|
||||
|
|
|
@ -35,7 +35,7 @@
|
|||
|
||||
(defun fileserver (ctx env &key doc-root)
|
||||
(let* ((message-head (getf env :message-head))
|
||||
(rel-path (str:join "/" (cdr message-head)))
|
||||
(rel-path (str:join "/" message-head))
|
||||
(file-app (make-instance 'lack/app/file:lack-app-file
|
||||
:file rel-path :root doc-root)))
|
||||
;(format t "~&file path: ~s~%" (merge-pathnames rel-path doc-root))
|
||||
|
@ -46,10 +46,10 @@
|
|||
'(200 (:content-type "text/plain") ("Hello World!")))
|
||||
|
||||
(defun select-app (ctx env)
|
||||
(let ((path (cdr (str:split "/" (getf env :path-info)))))
|
||||
(dolist (r (routes (core:config ctx)))
|
||||
(if (match (car r) nil)
|
||||
(progn
|
||||
(setf (getf env :message-head) (str:split "/" (getf env :path-info)))
|
||||
(when (match (car r) path)
|
||||
(setf (getf env :message-head) (nthcdr (length (car r)) path))
|
||||
;(format t "~&route: ~s~%" r)
|
||||
(return-from select-app
|
||||
#'(lambda ()
|
||||
|
@ -57,6 +57,10 @@
|
|||
#'(lambda () (message-handler ctx env)))
|
||||
|
||||
(defun match (pattern path)
|
||||
;(format t "~&match: pattern ~s, p ~s" pattern p)
|
||||
(dolist (e pattern)
|
||||
(unless (string= e (pop path))
|
||||
(return-from match nil)))
|
||||
t)
|
||||
|
||||
;;;; server context (= service)
|
||||
|
|
Loading…
Add table
Reference in a new issue