diff --git a/test/docs/demo.html b/test/docs/demo.html new file mode 100644 index 0000000..486c5c6 --- /dev/null +++ b/test/docs/demo.html @@ -0,0 +1 @@ +Hello Fileserver! diff --git a/test/etc/config-web.lisp b/test/etc/config-web.lisp index 0e52967..c4faa00 100644 --- a/test/etc/config-web.lisp +++ b/test/etc/config-web.lisp @@ -6,7 +6,10 @@ (let ((cfg (config:add *config* :server :class 'server:config - :port "8899")))) + :port "8899" + :routes + `((nil server:fileserver + :doc-root ,(t:test-path "" "docs"))))))) (let ((cfg (config:add *config* :client :class 'client:config diff --git a/web/server.lisp b/web/server.lisp index aed0494..6989b68 100644 --- a/web/server.lisp +++ b/web/server.lisp @@ -5,7 +5,8 @@ (:local-nicknames (:config :scopes/config) (:core :scopes/core)) (:export #:config #:address #:port #:routes - #:*listener* #:setup #:start #:stop)) + #:*listener* #:setup #:start #:stop + #:fileserver #:message-handler)) (in-package :scopes/web/server) @@ -32,10 +33,15 @@ (defun stop (ctx) (clack:stop (listener ctx))) -(defun fileserver (ctx env doc-root) - (let* ((rel-path (str:join "/" (getf env :messaage-head))) +(defun fileserver (ctx env &key doc-root) + (print env) + (let* ((message-head (getf env :message-head)) + (rel-path (str:join "/" (cdr message-head))) (file-app (make-instance 'lack/app/file:lack-app-file :file rel-path :root doc-root))) + (format t "~&fileserver: doc-root ~s, rel-path ~s, message-head ~s~%" + doc-root rel-path message-head) + (format t "~&file path: ~s~%" (merge-pathnames rel-path doc-root)) (lack/component:call file-app env))) (defun message-handler (ctx env) @@ -43,9 +49,18 @@ '(200 (:content-type "text/plain") ("Hello World!"))) (defun select-app (ctx env) + (dolist (r (routes (core:config ctx))) + (if (match (car r) nil) + (progn + (setf (getf env :message-head) (str:split "/" (getf env :path-info))) + (format t "~&route: ~s~%" r) + (return-from select-app + #'(lambda () + (apply (cadr r) ctx env (cddr r))))))) #'(lambda () (message-handler ctx env))) -(defun match (pattern path)) +(defun match (pattern path) + t) ;;;; server context (= service)