(define (test-binding) (values (lambda (proc) (proc "This is my input")) (lambda (code headers text) (printf "code: ~A headers: ~A text: ~A~%" code headers text)))) (define (sackup application #!key (server-binding test-binding) (port 8080)) (receive (listener responder) (server-binding port) (listener (lambda (request) (application request responder))))) (define ((add-middleware middleware application) request respond) (middleware request respond application)) ;;;;; First test ;;;;;;;;;;;;;;;;;;; (define (my-app request respond) (respond 200 '((content-type . "text/plain")) (string-downcase request))) ;; middleware altering the request (define (modify-request request respond next) (next "other request" respond)) ;; middleware altering the response (define (modify-response request respond next) (next request (lambda (code headers body) (respond 500 headers body)))) (sackup (add-middleware modify-response (add-middleware modify-request my-app)))