Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/upmc-enterprises/captain-whisker
JSON templating for node.js REST APIs
https://github.com/upmc-enterprises/captain-whisker
handlebars json nodejs
Last synced: 4 months ago
JSON representation
JSON templating for node.js REST APIs
- Host: GitHub
- URL: https://github.com/upmc-enterprises/captain-whisker
- Owner: upmc-enterprises
- License: mit
- Created: 2018-03-27T19:06:50.000Z (almost 7 years ago)
- Default Branch: master
- Last Pushed: 2023-01-07T03:57:16.000Z (about 2 years ago)
- Last Synced: 2024-09-28T14:03:53.293Z (4 months ago)
- Topics: handlebars, json, nodejs
- Language: JavaScript
- Size: 1.05 MB
- Stars: 5
- Watchers: 8
- Forks: 2
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Captain Whisker
Captain Whisker leverages Handlebars to make JSON templating easy in Node.js. Coming from rails, I really missed
[Jbuilder](https://github.com/rails/jbuilder), and the existing similar solutions in Node.js were either abandoned or
not quite what I wanted. It's probably overly simple and naive right now, but it works surprisingly well.Here is a simple example:
```
// view.hbs
{{#jsonList users}}
{
"id": {{json id}},
"firstName": {{json firstName}},
"lastName": {{json lastName}}
}
{{/jsonlist}}// app.js
const CaptainWhisker = require('captain-whisker');
CaptainWhisker.initialize('./src');
CaptainWhisker.build(
'view.hbs',
{
users: [
{
id: 1,
firstName: 'Jerry',
lastName: 'Seinfeld'
},
{
id: 2,
firstName: 'George',
lastName: 'Costanza'
},
{
id: 3,
firstName: undefined,
lastName: 'Kramer'
}
]
}
);
```Would produce a JSON structure like this:
```
[
{
"id": 1,
"firstName": "Jerry",
"lastName": "Seinfeld"
},
{
"id": 2,
"firstName": "George",
"lastName": "Costanza"
},
{
"id": 3,
"firstName": null,
"lastName": "Kramer"
}
]
```## Finding template files
Calling `CaptainWhisker.initialize('./root')` will search your source directory and all subdirectories for files with an
`.hbs` extension. This shold be done once per process; CaptainWhisker will store store the precompiled templates so
they don't need to be compiled with every use. Any `.hbs` files it finds that don't start with `_` will be compiled and
registered as templates, usable with `CaptainWhisker.build('path/relative/to/root.hbs', context)`.Any files that have names beginning with an underscore will be considered partials.
## Partials support
CaptainWhisker supports partials, so you can reuse pieces of templates across your views. For example:
```
// _user.hbs
{
"id": {{json id}},
"firstName": {{json firstName}},
"lastName": {{json lastName}}
}// index.hbs
{{#jsonList users}}
{{> _user}}
{{/jsonList}}// update.hbs - pass a context object and a param to the partial
{{> _user user id=foo.id}}
```For details on passing partial contexts and parameter, see the [Handlebars](http://handlebarsjs.com/partials.html)
documentation.