I have a MySQL database with two columns: Username and Password. I want to list usernames one by one.
The first function holds my database query:
msg.topic = "SELECT * FROM userlog";
return msg;
The second function loops until it displays all database usernames. maxarray
is the maximum number of usernames in my database.
var maxarray = global.get("maxarray");
var i;
for (i = 0; i < maxarray; i++) {
msg.payload = msg.payload[i].Username;
node.send(msg);
}
return;
Whenever I run this, it gives me an error:
"TypeError: Cannot read property '2' of undefined"
Here's my flow if you would like to import.
[{"id":"213ba9d6.1ba576","type":"tab","label":"Flow 1","disabled":false,"info":""},{"id":"820a48f5.ff49d8","type":"debug","z":"213ba9d6.1ba576","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","x":490,"y":100,"wires":[]},{"id":"673daf0e.c65b8","type":"inject","z":"213ba9d6.1ba576","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"\"SELECT * FROM userlog\"","payload":"","payloadType":"date","x":100,"y":100,"wires":[["3724e918.bf5b86"]]},{"id":"dbe2587d.cfb7a8","type":"mysql","z":"213ba9d6.1ba576","mydb":"f1e0508e.13503","name":"db","x":290,"y":100,"wires":[["fd991622.c20928"]]},{"id":"3724e918.bf5b86","type":"function","z":"213ba9d6.1ba576","name":"msg.topic","func":"msg.topic = \"SELECT * FROM userlog\";\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":180,"y":140,"wires":[["dbe2587d.cfb7a8"]]},{"id":"fd991622.c20928","type":"function","z":"213ba9d6.1ba576","name":"for loop","func":"var i;\nvar array;\nfor (i = 0; i < msg.payload.length; i++) {\n msg.payload = array[i].Username;\n node.send(msg);\n}\nreturn;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":380,"y":140,"wires":[["820a48f5.ff49d8"]]},{"id":"f1e0508e.13503","type":"MySQLdatabase","name":"","host":"127.0.0.1","port":"3306","db":"test dump","tz":"","charset":"UTF8"}]
You need to take a copy of msg.payload
before the loop as you've replaced it before sending the msg
object.
You should probably also be using the array length rather than trying to keep track in a global variable
var i;
var array = msg.payload
for (i = 0; i < array.length; i++) {
msg.payload = array[i].Username;
node.send(msg);
}
return;