I admit I am still learning some of the existing nodes.
When I got into NR a bit further I was wanting a way to control if a message could pass a point.
By default there is no obvious way of doing this with the supplied nodes.
The way around it for me was this way:
[{"id":"de6e9992.645088","type":"link in","z":"8c64c96f.09f13","name":"TRAIN","links":["8fd2d7ca.72146"],"x":810,"y":2260,"wires":[["590e4a25.90892c","81d505d2.aa7da8"]],"l":true},{"id":"590e4a25.90892c","type":"function","z":"8c64c96f.09f13","name":"Train detect","func":"let m = flow.get('MODE');\nif (m == \"HOLD\")\n{\n    //      HOLD\n    flow.set('TRAIN','HELD');\n//    msg.payload = \"STOP\";\n//    return msg;\n    return;     //  Don't return anything.\n                //  Though I may need to send\n                //  something as a \"signal\" of\n                //  a new message.\n}\nreturn msg;","outputs":1,"noerr":0,"x":980,"y":2260,"wires":[["79823e18.d22d68"]]},{"id":"81d505d2.aa7da8","type":"change","z":"8c64c96f.09f13","name":"Get MODE","rules":[{"t":"set","p":"payload","pt":"msg","to":"MODE","tot":"flow"}],"action":"","property":"","from":"","to":"","reg":false,"x":980,"y":2190,"wires":[["1ba6b9d7.19f76e"]]},{"id":"1ba6b9d7.19f76e","type":"switch","z":"8c64c96f.09f13","name":"","property":"payload","propertyType":"msg","rules":[{"t":"eq","v":"HOLD","vt":"str"},{"t":"eq","v":"RELEASE","vt":"str"}],"checkall":"true","repair":false,"outputs":2,"x":1140,"y":2190,"wires":[["916777f.3131688"],["817bae21.99f678"]]},{"id":"817bae21.99f678","type":"change","z":"8c64c96f.09f13","name":"Allow","rules":[{"t":"set","p":"payload","pt":"msg","to":"GO","tot":"str"},{"t":"set","p":"topic","pt":"msg","to":"CONTROL","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":1280,"y":2210,"wires":[["79823e18.d22d68"]]},{"id":"79823e18.d22d68","type":"gate","z":"8c64c96f.09f13","name":"","controlTopic":"CONTROL","defaultState":"open","openCmd":"GO","closeCmd":"STOP","toggleCmd":"toggle","defaultCmd":"default","persist":false,"x":1470,"y":2260,"wires":[[]]},{"id":"916777f.3131688","type":"change","z":"8c64c96f.09f13","name":"Stop","rules":[{"t":"set","p":"payload","pt":"msg","to":"STOP","tot":"str"},{"t":"set","p":"topic","pt":"msg","to":"CONTROL","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":1290,"y":2160,"wires":[["79823e18.d22d68"]]},{"id":"924ab50e.4d2258","type":"comment","z":"8c64c96f.09f13","name":"Allow trains to pass (or stop them)","info":"","x":1080,"y":2120,"wires":[]}]
Which looks like this:

And this is better than the original way I did it by having a separate message to control the flow.
The example uses a flow variable to do it.
Walk through:
A message arrives a the TRAIN input node.
Going up, it gets the flow.MODE and then splits if it is ON or OFF.
That then makes two messages which are sent to the gate node to allow/block the message.
Though it works, I only now realised an EASIER way of doing just that.
Granted it is a given that you are reading a context (right term?) variable rather than a message.
But all that could be replaced with this:
[{"id":"de6e9992.645088","type":"link in","z":"8c64c96f.09f13","name":"TRAIN","links":["8fd2d7ca.72146"],"x":950,"y":2260,"wires":[["1ba6b9d7.19f76e"]],"l":true},{"id":"1ba6b9d7.19f76e","type":"switch","z":"8c64c96f.09f13","name":"","property":"MODE","propertyType":"flow","rules":[{"t":"eq","v":"ALLOW","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":1110,"y":2260,"wires":[["79823e18.d22d68"]]},{"id":"79823e18.d22d68","type":"gate","z":"8c64c96f.09f13","name":"","controlTopic":"CONTROL","defaultState":"open","openCmd":"GO","closeCmd":"STOP","toggleCmd":"toggle","defaultCmd":"default","persist":false,"x":1300,"y":2260,"wires":[[]]},{"id":"924ab50e.4d2258","type":"comment","z":"8c64c96f.09f13","name":"Allow trains to pass (or stop them)","info":"","x":1130,"y":2190,"wires":[]}]
Or:
Graphically

So much easier and compact.
Basically it works like so:
As before, message arrives at TRAIN node.
The switch node:
check if flow.MODE == "Allow"  (for example)
If it does match, it passes the message.