@funcstache/koa-middleware
v0.1.10
Published
Koa middleware to create dynamic webpages that are rendered on the server.
Downloads
21
Readme
koa-middleware
koa middleware to create dynamic webpages that are rendered on the server.
- Defines conventions that simplify page creation for developers
- File-based routing
- Ideal for rendering templates on the server and returning HTML to the client
- Brings the fun back to web development!
We're using: the proven pattern of rendered templates, combined with new JavaScript capabilities, plus some defined conventions, to simplify rendering web pages dynamically.
Why? Because client-side rendered SPAs are unnecessary for most websites. Also, using a client-side-rendering library to render pages on the server adds complexity for developers, render time, and code bloat that slows down development progress.
install
npm i @funcstache/koa-middleware
File-based routing
funcstache koa-middleware uses file-based routing, the path of the URL defines which part of the
file system is accessed. For example the URL path / might be handled by the contents of a
directory named site. The root directory is passed to
funcstache using the
directory
option.
koa-middleware depends on each directory, that can be accessed by the URL, to contain an index.js file. koa-middleware treats index.js as an ES module that exports three optional functions.
Of course you will also need at least one mustache file to render a document (usually an HTML file). The mustache file can have whatever name you want, but it must end with the ".mustache" extension, e.g. books.mustache. For example, your directory structure could look like this:
/
├── books/
│ ├── index.js
│ └── books.mustache
└── movies/
├── index.js
└── movies.mustache
Path params
koa-middleware allows directories to be named using path-to-regexp named
parameters. The named parameter
values will be available to functions in the index.js file from
Context.params
.
Here's an example of a directory structure that uses a named parameter. The books directory has
a subdirectory named :id. If a path like "/books/451" is provided to funcstache it will resolve
to the /books/:id directory and the value "451" will be provided via Context.params
.
/
└── books/
├── index.js
├── books.mustache
└── :id/
├── index.js
└── book.mustache