http://www.steves-internet-guide.
com/node-red-functions/
El mensaje payload puede ser accedido mediante:
var payload=msg.payload;
y puede ser modificado:
msg.payload=payload;
Igualmente el mensaje topic puede ser accedido mediante:
var topic=msg.topic;
y puede ser modificado:
msg.topic= topic;
Se puede extender usando
var newvalue;
msg.newproperty=newvalue;
Ahora el objeto msg tiene una propiedad llamada msg.newproperty.
Crear un nuevo objeto de mensaje Dentro de una función puede crear
un nuevo objeto msg usando:
var newMsg = { payload: msg.payload,topic:msg.topic };
return newMsg;
Ejemplo:
A continuación, usamos el nodo de inyección para inyectar una carga
útil con la cadena "cadena de prueba" y un tema de prueba.
Si pasamos esto a nuestra función no hacer nada como antes,
obtendremos el siguiente resultado.
El resultado es el esperado. Esta vez mostramos el tema como prueba
y la carga útil como cadena de prueba.
Ahora si modificamos la función para cambiar la carga útil t
Mayúsculas y el tema a mayúsculas usando el siguiente código:
var payload=msg.payload; //get payload
msg.payload=payload.toUpperCase(); //convert to uppercase
var topic=msg.topic; //get topic
msg.topic=topic.toUpperCase();//convert to uppercase
return msg;
El resultado es este:
Código:
---------------------------- código node red --------------------------------------
[{"id":"369a5b23.eef5b4","type":"tab","label":"Flow
1","disabled":false,"info":""},
{"id":"67bf457a.10e95c","type":"inject","z":"369a5b23.eef5b4","name":""
,"topic":"test","payload":"\"test
string\"","payloadType":"str","repeat":"","crontab":"","once":false,"onceD
elay":0.1,"x":220,"y":120,"wires":[["a8be3d75.10356"]]},
{"id":"d9bac251.2029f","type":"debug","z":"369a5b23.eef5b4","name":""
,"active":true,"tosidebar":true,"console":false,"tostatus":false,"complete"
:"true","targetType":"full","x":710,"y":120,"wires":[]},
{"id":"a8be3d75.10356","type":"function","z":"369a5b23.eef5b4","name"
:"","func":"var payload=msg.payload; //get payload\
nmsg.payload=payload.toUpperCase(); //convert to uppercase\nvar
topic=msg.topic; //get topic\nmsg.topic=topic.toUpperCase();//convert
to uppercase\nreturn
msg;","outputs":1,"noerr":0,"x":480,"y":120,"wires":
[["d9bac251.2029f"]]}]
El módulo function tiene la posibilidad de tener 2 salidas.
Para devolver mensajes a múltiples salidas, debe
devolver una matriz.
return [msg1,msg2];
Msg1 aparecerá en la salida1 y msg2 en la salida2.
Para detener una ruta de flujo, devuelve null en esa salida.
Entonces, para devolver el objeto msg en output1 y nada en output2
use:
return [msg1,null];
return [msg1];
Ejemplo
En el flujo de ejemplo, utilizamos dos nodos de inyección para inyectar
un mensaje sobre dos temas diferentes en un nodo de función con dos
salidas.
La función envía el mensaje a la salida en función del nombre del
tema.
La prueba de test1 va a la output1 y test2 va a la output 2.
----------------------------------------código node red-------------------------
[{"id":"369a5b23.eef5b4","type":"tab","label":"Flow
1","disabled":false,"info":""},
{"id":"67bf457a.10e95c","type":"inject","z":"369a5b23.eef5b4","name":""
,"topic":"test1","payload":"\"test
string1\"","payloadType":"str","repeat":"","crontab":"","once":false,"once
Delay":0.1,"x":290,"y":80,"wires":[["a8be3d75.10356"]]},
{"id":"d9bac251.2029f","type":"debug","z":"369a5b23.eef5b4","name":""
,"active":true,"tosidebar":true,"console":false,"tostatus":false,"complete"
:"true","targetType":"full","x":690,"y":60,"wires":[]},
{"id":"a8be3d75.10356","type":"function","z":"369a5b23.eef5b4","name"
:"","func":"var topic=msg.topic;\nif (topic==\"test1\"){\n return
[msg,null];\n \n}\nif (topic==\"test2\"){\n return [null,msg];\n \
n}","outputs":2,"noerr":0,"x":480,"y":120,"wires":[["d9bac251.2029f"],
["6d6b26d0.2411b8"]]},
{"id":"5065e197.7cc77","type":"inject","z":"369a5b23.eef5b4","name":"",
"topic":"test2","payload":"test 2
string","payloadType":"str","repeat":"","crontab":"","once":false,"onceDe
lay":0.1,"x":280,"y":180,"wires":[["a8be3d75.10356"]]},
{"id":"6d6b26d0.2411b8","type":"debug","z":"369a5b23.eef5b4","name":
"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complet
e":"false","x":690,"y":140,"wires":[]}]
-------------------------------------------------------------------------------------------
Múltiples mensajes en una sola salida .
Puede usar una matriz para devolver múltiples
objetos msg en una sola salida. Entonces el
regreso se vería así:
return [msg_object_array];
Es importante que devuelva una matriz de objetos
en una matriz.
Esto se ve mejor con un ejemplo
En este ejemplo, usamos un nodo de inyección para inyectar una
cadena de prueba en el nodo de función.
El nodo de función toma la cadena y la usa para la carga útil del
mensaje, pero en lugar de enviar 1 mensaje tiene un bucle for que
crea 3 mensajes y los coloca en una matriz. ¡La función devuelve la
matriz como una matriz!
Aquí está el flujo:
Resultado:
------------------------------código node red---------------------------
[{"id":"67bf457a.10e95c","type":"inject","z":"369a5b23.eef5b4","name":"
","topic":"test1","payload":"\"test
string1\"","payloadType":"str","repeat":"","crontab":"","once":false,"once
Delay":0.1,"x":290,"y":80,"wires":[["a8be3d75.10356"]]}]