Extending the original handlebars Node-Red module that allows you to apply handlebars to a given message (msg) property and place the results in a separate property.
Based of the original https://flows.nodered.org/node/node-red-contrib-handlebars which doesn't have a git repo anymore, and has no more support for it.
FLOW JSON
[{"id":"128d44a7.7905cb","type":"tab","label":"Flow 1","disabled":false,"info":""},{"id":"b055b07a.9c183","type":"handlebars","z":"128d44a7.7905cb","name":"","sourceProperty":"payload.person","targetProperty":"payload.response","query":"Hello {{name}}! Happy {{age}} birthday!","x":430,"y":180,"wires":[["96b8f886.005828"]]},{"id":"96b8f886.005828","type":"debug","z":"128d44a7.7905cb","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","x":670,"y":180,"wires":[]},{"id":"2eb6a16e.fc7d7e","type":"inject","z":"128d44a7.7905cb","name":"Inject Payload","topic":"","payload":"{\"person\":{\"name\":\"John Doe\",\"age\":\"31\"}}","payloadType":"json","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":150,"y":180,"wires":[["b055b07a.9c183"]]}]
For example, with the following configuration:
Name | Description | Default Value |
---|---|---|
Name | The label shown on the node within the editor | Handlebars |
Source Property | The property on the msg object to provide to handlebars. | payload.person |
Target Property | The property on the msg object to apply the results. | payload.response |
Template | The handlebars template to apply | Hello {{name}}! Happy {{age}} birthday! |
Template Folder | The folder to fetch a template from | .templates |
Template Name | The template to load from disk or cache to apply | {msg.templatename} |
No Cache | Do not cache the loaded templates. This will be a performace hit on the system | false |
The following msg object:
{
payload: {
person: {
"name": "John Doe",
"age": "31"
}
}
}
Provides the following:
{
payload: {
response: "Hello John Doe! Happy 31 birthday!",
person: {
"name": "John Doe",
"age": "31"
}
}
}
If you supply a Template Folder then it will use the supplied Template Name to load the template from that folder. If no name is provided then the msg.templatename will be used. Any loaded template will then be cached and used from the cache. If no template is found then a new property with an error will be added to the msg. For debugging templates without reloading Node Red, you can check the No Cache checkbox. But this will be a performace impact on the system, as each template has to be re compiled every time.
- To test the project run
npm run test
ornpm run test:watch
to continuously test.
- To run linters on the project, run
npm run lint
ornpm run lint:watch
to continously lint.