This is a simple web application using Component, Ring, Compojure, and Selmer connected to a local SQLite database.
Clojure beginners often ask for a "complete" example that they can look at to see how these common libraries fit together and for a long time I pointed them at the User Manager example in the Framework One for Clojure repo -- but since I EOL'd that framework and I'd already rewritten the example app to no longer use the framework, it's just confusing to point them there, so this is a self-contained repo containing just that web app example.
This example assumes that you have the Clojure CLI installed, and provides a deps.edn
file.
Clojure 1.10 (or later) is required. The "model" of this example app uses namespace-qualified keys in hash maps. It uses next.jdbc -- the "next generation" JDBC library for Clojure -- which produces namespace-qualified hash maps from result sets.
Clone the repo, cd
into it, then follow below to Run the Application or Run the application in REPL
or Run the tests.
clj -m usermanager.main
It should create a SQLite database (usermanager_db
) and populate two tables (department
and addressbook
) and start a Jetty instance on port 8080.
If that port is in use, start it on a different port. For example, port 8100:
clj -m usermanager.main 8100
Start REPL
$ clj
Once REPL starts, start the server as an example on port 8888:
user=> (require 'usermanager.main) ; load the code
user=> (in-ns 'usermanager.main) ; move to the namesapce
usermanager.main=> (def system (new-system 8888)) ; specify port
usermanager.main=> (alter-var-root #'system component/start) ; start the server
clj -A:test:runner
There aren't any tests yet but I will create some soon!
- There should be some real-world tests.
- I might add a
datafy
/nav
example.
Copyright (c) 2015-2019 Sean Corfield.
Distributed under the Apache Source License 2.0.