File-based router for ningle
Find a file
2024-04-14 16:39:43 +09:00
src Change prefix from 'on' to 'handle' 2024-04-14 16:39:43 +09:00
tests setup test env 2024-02-16 10:44:45 +09:00
.gitignore Setup lisp env 2024-02-13 16:32:48 +09:00
LICENSE Update README 2024-02-14 01:46:42 +09:00
ningle-fbr-tests.asd setup test env 2024-02-16 10:44:45 +09:00
ningle-fbr.asd setup test env 2024-02-16 10:44:45 +09:00
qlfile Treat package names as string 2024-03-11 13:25:44 +09:00
qlfile.lock Treat package names as string 2024-03-11 13:25:44 +09:00
README.md Change prefix from 'on' to 'handle' 2024-04-14 16:39:43 +09:00

ningle-fbr (WIP)

An utility for ningle and jingle to enable file-based routing

What is file-based routing?

File-based routing is a concept commonly used in modern web frameworks such as Next.js. Instead of explicitly defining routes through configuration or code, the framework automatically sets up routes based on the file hierarchy of a particular directory (usually the "pages" or "routes" directory).

Usage

To use ningle-fbr, you must use package-inferred-system.

/example.asd

(defsystem "example"
  :class :package-inferred-system
  :pathname "src"
  :depends-on ("example/app")

/src/app.lisp

(uiop:define-package #:example
  (:nicknames #:example/app)
  (:use #:cl)
  (:import-from #:ningle)
  (:import-from #:ningle-fbr
          #:assign-routes))
(in-package #:example/app)

(defparameter *app* (make-instance 'ningle:<app>))

(assign-routes *app*
               :directory "src/routes"
               :system "example")

Static routing

/src/routes/index.lisp/

/src/routes/hello.lisp/hello

/src/routes/users/index.lisp/users

/src/routes/nested/page.lisp/nested/page

(uiop:define-package #:example/routes/index
  (:use #:cl)
  (:export #:handle-get
           #:handle-post
           #:handle-put
           #:handle-delete))
(in-package #:example/routes/index)

(defun handle-get (params)
  ...)

(defun handle-post (params)
  ...)

(defun handle-put (params)
  ...)

(defun handle-delete (params)
  ...)

Dynamic routing

A file or directory name prefixed with '=' indicates a dynamic path.

In the example below, the parameter id can be obtained from handler's params.

/src/routes/user/=id.lisp/user/:id

License

Licensed under MIT License. 

Copyright (c) 2024, skyizwhite.