Конечная точка, определенная с помощью define-easy-handler, возвращает 404

Я определил простую систему в helloworld.asd:

(asdf:defsystem #:helloworld
  :description "helloworld"
  :author "Duncan Bayne <duncan@bayne.id.au>"
  :license "WTFNMF"
  :depends-on (#:hunchentoot)
  :serial t
  :components ((:file "package")
               (:file "helloworld")))

... определение пакета в package.lisp:

(defpackage #:helloworld
  (:use #:cl #:hunchentoot))

... и соответствующий веб-сервер Hello World в helloworld.lisp:

(in-package #:helloworld)

(defvar *acceptor* (make-instance 'acceptor :port 4242))

(start *acceptor*)

(define-easy-handler (greet :uri "/hello") ()
  "<html><body><h1>Hello World!</h1></body></html>")

В SLIME REPL я запускаю веб-сервер с:

CL-USER> (load "/usr/home/duncan/code/helloworld/helloworld.asd")
CL-USER> (ql:quickload "helloworld")

Если я перейду на http://localhost:4242/hello, я ожидаю увидеть мой привет HTML. Вместо этого я получаю ошибку 404, и журнал показывает:

127.0.0.1 - [2017-08-10 08:18:19] "GET /hello HTTP/1.1" 404 341 "-" "Mozilla/5.0 (X11; FreeBSD amd64; rv:54.0) Gecko/20100101 Firefox/54.0"

Я подозреваю, что упускаю что-то довольно очевидное здесь; любые советы / указатели на документацию будут оценены. Системные данные:

Clozure Common Lisp Version 1.11 (FreebsdX8664)
FreeBSD 11.1-RELEASE amd64
Hunchentoot 1.2.37
Mozilla Firefox 54.0.1
SLIME 20170804.1113

1 ответ

Решение

Вы делаете пример ACCEPTOR вместо EASY-ACCEPTOR (или подкласс). Легкий обработчик зарегистрирован, но ваш акцептор не собирается его использовать. Это должно работать, например:

(defvar *acceptor* (make-instance 'easy-acceptor :port 4242))
(start *acceptor*)
(define-easy-handler (test :uri "/test") () "Pass")
Другие вопросы по тегам