Skip to content

Extended node module for using handlebars to generate more complex templates

License

Notifications You must be signed in to change notification settings

steves2j/node-red-contrib-handlebarsjs

Repository files navigation

Overview

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.

Running Tests

  • To test the project run npm run test or npm run test:watch to continuously test.

Running Linter

  • To run linters on the project, run npm run lint or npm run lint:watch to continously lint.

About

Extended node module for using handlebars to generate more complex templates

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published