Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/jysperm/cichorium
Routing framework based on Promise using CoffeeScript
https://github.com/jysperm/cichorium
Last synced: 3 days ago
JSON representation
Routing framework based on Promise using CoffeeScript
- Host: GitHub
- URL: https://github.com/jysperm/cichorium
- Owner: jysperm
- License: mit
- Created: 2014-11-03T08:18:49.000Z (about 10 years ago)
- Default Branch: master
- Last Pushed: 2015-06-28T07:24:56.000Z (over 9 years ago)
- Last Synced: 2024-10-10T17:51:58.070Z (about 1 month ago)
- Language: CoffeeScript
- Homepage: https://www.npmjs.com/package/cichorium
- Size: 175 KB
- Stars: 13
- Watchers: 2
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Cichorium
Routing framework based on Promise using CoffeeScript.Cichorium has a Route Table and an Error Route Table. The route table is an array containing some of:
* a child route table (Array)
* a middleware `(req, res) -> Promise`The middleware will be executed sequentially. If the middleware return a Promise, Cichorium will execute next middleware after the promise is fulfilled.
Inside middleware, you can use `nextRoute` skip other middlewares on this route, enter next route on parent level directly. Conditional-route are implemented by this feature, like match HTTP method or URL prefix.
If middleware throws a Exception or Promise is rejected, Cichorium will enter error handling, middleware in error route table will be executed sequentially. if new exception has be thrown, the new exception will replace the original.
Error middleware can use `errorResolved` to resolve exception, the other error middleware will not be executed. Unless there are more than one exception, the last exception will be passed to next error middleware.
## Usage
Cichorium = require 'cichorium'
app = new Cichorium()app.use '/account', (req, res) ->
Account.authenticate(req.headers['x-token']).then (account) ->
req.account = accountapp.get '/account/dashboard', (req, res) ->
res.json 200,
hello: req.account?.nameapp.catch (err) ->
res.send 500, err.messageapp.listen 3000