This folder contains all backend-only code in this project. It's broken up into:
../index.ts
- this is the entrypoint for this whole
project, which is why it's in the folder above this one, even though it's
technically part of the backenddatabase/
- this contains the code for interfacing with the app's SQLite
database tableThis app uses Hono as the API framework. You can think of Hono as a replacement for ExpressJS that works in serverless environments like Val Town or Cloudflare Workers. If you come from Python or Ruby, Hono is also a lot like Flask or Sinatra, respectively.
This backend HTTP server is responsible for serving all static assets to the browser to render the app, including HTML, JavaScript (including all client-side React), CSS, and even the favicon SVG.
We use helper functions from std/utils for getting files and serving them.
The most complicated part of this backend API is serving index.html. In this app
(like most apps) we serve it at the root, ie GET /
.
We bootstrap index.html
with some initial data from the server, so that it
gets dynamically injected JSON data without having to make another round-trip
request to the server to get that data on the frontend. This is a common pattern
for client-side rendered apps.
This app has two CRUD API routes: for reading and inserting into the messages
table. They both speak JSON, which is standard. They import their functions from
/backend/database/queries.ts
. These routes are called from the React app to
refresh and update data.
Hono and other API frameworks have a habit of swallowing up Errors. We turn off this default behavior by re-throwing errors, because we think most of the time you'll want to see the full stack trace instead of merely "Internal Server Error". You can customize how you want errors to appear.