mirror of
https://github.com/sbrl/powahroot.git
synced 2024-11-24 07:03:01 +00:00
Add section to README on server
This commit is contained in:
parent
a1e62c11e4
commit
46fa45600a
2 changed files with 18 additions and 7 deletions
14
README.md
14
README.md
|
@ -9,8 +9,6 @@ _Powahroot_ is a pair of micro routing frameworks, presented as an ES6 module:
|
||||||
|
|
||||||
It's based on [`rill`](https://www.npmjs.com/package/rill) (see the npm package bearing the name), but stripped down and simplified.
|
It's based on [`rill`](https://www.npmjs.com/package/rill) (see the npm package bearing the name), but stripped down and simplified.
|
||||||
|
|
||||||
**Documentation is work-in-progress!**
|
|
||||||
|
|
||||||
|
|
||||||
## Getting Started
|
## Getting Started
|
||||||
Install powahroot as a dependency with npm:
|
Install powahroot as a dependency with npm:
|
||||||
|
@ -41,7 +39,6 @@ Syntax | Meaning
|
||||||
`/add/vegetable/:name/:weight` | Parameters. Match values an pull them into an object automatically. Does not like forward slashes in parameter values.
|
`/add/vegetable/:name/:weight` | Parameters. Match values an pull them into an object automatically. Does not like forward slashes in parameter values.
|
||||||
`/images/::path` | Parameter values with forward slashes. If you want to use parameters, but need values to be able to contain forward slashes `/`, this is for you. Don't forget you can mix-and-match this with the previous example!
|
`/images/::path` | Parameter values with forward slashes. If you want to use parameters, but need values to be able to contain forward slashes `/`, this is for you. Don't forget you can mix-and-match this with the previous example!
|
||||||
|
|
||||||
|
|
||||||
### Client
|
### Client
|
||||||
Initialise a new router like this:
|
Initialise a new router like this:
|
||||||
|
|
||||||
|
@ -54,7 +51,16 @@ const router = new ClientRouter({
|
||||||
```
|
```
|
||||||
|
|
||||||
### Server
|
### Server
|
||||||
TODO: Finish this section
|
The server router works slightly differently, to account for the different environment it's designed for. Here's how to use it:
|
||||||
|
|
||||||
|
```js
|
||||||
|
const router = new ServerRouter();
|
||||||
|
router.on_all(async (context, next) => { console.debug(context.url); await next()})
|
||||||
|
router.get("/files/::filepath", (context, _next) => context.send.plain(200, `You requested ${context.params.filepath}`));
|
||||||
|
// .....
|
||||||
|
```
|
||||||
|
|
||||||
|
The `context` argument there is of type `RouterContext`. Check out the API reference (link below) to learn about the other useful properties it has.
|
||||||
|
|
||||||
### Reference
|
### Reference
|
||||||
TODO: Generate reference from code automatically
|
TODO: Generate reference from code automatically
|
||||||
|
|
|
@ -12,7 +12,11 @@ import { pathspec_to_regex } from '../Shared/Pathspec.mjs';
|
||||||
class ServerRouter
|
class ServerRouter
|
||||||
{
|
{
|
||||||
constructor(verbose = false) {
|
constructor(verbose = false) {
|
||||||
/** The actions to run in turn. */
|
/**
|
||||||
|
* The actions to run in turn.
|
||||||
|
* @private
|
||||||
|
* @type {Array<Function>}
|
||||||
|
*/
|
||||||
this.actions = [];
|
this.actions = [];
|
||||||
/** Whether to activate versbose mode. Useful for debugging the router. */
|
/** Whether to activate versbose mode. Useful for debugging the router. */
|
||||||
this.verbose = verbose;
|
this.verbose = verbose;
|
||||||
|
@ -75,10 +79,10 @@ class ServerRouter
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Execute the specified action for requests matching the given parameters.
|
* Execute the specified action for requests matching the given parameters.
|
||||||
* TODO: Consider merging with on_all and refactoring to take an object literal which we cna destructure instead
|
* TODO: Consider merging with on_all and refactoring to take an object literal which we can destructure instead
|
||||||
* @param {array} methods The HTTP methods to run the action for. Include '*' to specify all methods.
|
* @param {array} methods The HTTP methods to run the action for. Include '*' to specify all methods.
|
||||||
* @param {string|regex} pathspec The specification of the paths that this action should match against. May be a regular expression.
|
* @param {string|regex} pathspec The specification of the paths that this action should match against. May be a regular expression.
|
||||||
* @param {Function} action The action to execute. Will be passed the parameters `context` (Object) and `next` (Function).
|
* @param {Function} action The action to execute. Will be passed the parameters `context` (RouterContext) and `next` (Function).
|
||||||
*/
|
*/
|
||||||
on(methods, pathspec, action) {
|
on(methods, pathspec, action) {
|
||||||
let regex_info = pathspec instanceof RegExp ? {regex: pathspec, tokens: [] } : pathspec_to_regex(pathspec);
|
let regex_info = pathspec instanceof RegExp ? {regex: pathspec, tokens: [] } : pathspec_to_regex(pathspec);
|
||||||
|
@ -171,6 +175,7 @@ class ServerRouter
|
||||||
/**
|
/**
|
||||||
* Iterates over all the generated middleware.
|
* Iterates over all the generated middleware.
|
||||||
* @return {Generator} A generator that returns each successive piece of middleware in turn.
|
* @return {Generator} A generator that returns each successive piece of middleware in turn.
|
||||||
|
* @generator
|
||||||
*/
|
*/
|
||||||
*iterate() {
|
*iterate() {
|
||||||
for(let action of this.actions) {
|
for(let action of this.actions) {
|
||||||
|
|
Loading…
Reference in a new issue