LoginSignup
3
5

More than 5 years have passed since last update.

Node-REDでMySQLに格納されたデータを検索し、ブラウザ表示する。

Last updated at Posted at 2018-01-31

0.はじめに

省略語を表示するサイトを作ってみる(@egplntさん)
を一通りやってください。

1.データベースを用意する

このようなデータベースをMySQLで作成してください。
スクリーンショット 2018-01-31 18.46.53.png

データベース名:db01
テーブル名:table01
表のタイトル:IDNAMEC1…(この後は使わないので適当でいいです)

2.こぴぺる

[{"id":"101244a.14a6b3b","type":"mysql","z":"d9034166.46b908","mydb":"c84755b6.ca03f8","name":"","x":450,"y":180,"wires":[["98a2f9b3.57801"]]},{"id":"53e7cee1.b82eb","type":"http in","z":"d9034166.46b908","name":"","url":"/test1218b","method":"get","upload":false,"swaggerDoc":"","x":140,"y":180,"wires":[["1632b28c.0ea44d","9bb906f6.24d9e8"]]},{"id":"1632b28c.0ea44d","type":"function","z":"d9034166.46b908","name":"select*from","func":"msg.data1 = msg.payload.msg;\nmsg.topic = \"select * from table01 where c1 = \\u0027\";\nmsg.topic += msg.payload.msg;\nmsg.topic += \"\\u0027;\";\n\n//msg.topic = \"select name from table01 where c1 = 'http';\";\nreturn msg;","outputs":1,"noerr":0,"x":310,"y":180,"wires":[["101244a.14a6b3b"]]},{"id":"50c91b8b.452bdc","type":"debug","z":"d9034166.46b908","name":"","active":true,"console":"false","complete":"payload","x":950,"y":240,"wires":[]},{"id":"7521f0bc.829fb8","type":"http response","z":"d9034166.46b908","name":"","statusCode":"","headers":{},"x":1130,"y":180,"wires":[]},{"id":"dd787de7.87d9e8","type":"template","z":"d9034166.46b908","name":"css","field":"payload.css","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"#basic {\n  font-family: meiryo;\n}\n#a1 {\n  background-color:  #fffafa;\n  padding: 20px;\n  height: 100px;\n}\n#b1 {\n  background-color:  #f8f8ff;\n  padding: 20px;\n  height: 100px;\n  text-align: center;\n  font-size: 18pt\n}\n#c1 {\n  background-color:  #fffaf0;\n  padding: 20px;\n  height: 100px;\n  text-align: left;\n  font-size: 18pt\n}\n","x":310,"y":120,"wires":[["c8c89ccc.78ec78"]]},{"id":"c8c89ccc.78ec78","type":"template","z":"d9034166.46b908","name":"test1218a.html 入力用","field":"payload","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"<html>\n  <head>\n    <style type=\"text/css\">\n      {{{payload.css}}}\n    </style>\n  </head>\n  <body style=\"background-color: #fffafa\">\n    <div id='basic'>\n      <div id='a1'>\n        <h1>\n          製品情報検索\n        </h1>\n      </div>\n    <div id='b1'>\n    \n    </div>\n    <div id='c1'>\n      <b>検索する情報を入力します</b></br>\n      <b>IDか製品名を入れてください。</b>\n      <form action=\"http://127.0.0.1:1880/test1218b\" method=\"get\">\n        <textarea name=\"msg\" cols=20 rows=1 style=\"font-size:24pt;\">おは</textarea></textarea>\n      <button type=\"submit\" name=\"submit\" value=\"送信\">\n        <font size=\"2\">表示要求を</font><font size=\"5\" color=\"red\">送信!</font>\n      </button>\n\n    </div>\n  </div>\n</body>\n</html>\n","x":500,"y":120,"wires":[["89eaa987.62ee68","f67ff05a.e56ab8"]]},{"id":"e825a2a9.2e4268","type":"http in","z":"d9034166.46b908","name":"","url":"/test1218a","method":"get","upload":false,"swaggerDoc":"","x":140,"y":120,"wires":[["dd787de7.87d9e8"]]},{"id":"89eaa987.62ee68","type":"http response","z":"d9034166.46b908","name":"","x":690,"y":120,"wires":[]},{"id":"f67ff05a.e56ab8","type":"debug","z":"d9034166.46b908","name":"","active":false,"console":"false","complete":"false","x":710,"y":60,"wires":[]},{"id":"98a2f9b3.57801","type":"template","z":"d9034166.46b908","name":"css","field":"payload.css","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"#basic {\n  font-family: meiryo;\n}\n#a1 {\n  background-color:  #fffafa;\n  padding: 20px;\n  height: 100px;\n}\n#b1 {\n  background-color:  #f8f8ff;\n  padding: 20px;\n  height: 100px;\n  text-align: center;\n  font-size: 18pt\n}\n#c1 {\n  background-color:  #fffaf0;\n  padding: 20px;\n  height: 100px;\n  text-align: left;\n  font-size: 18pt\n}\n","x":570,"y":180,"wires":[["35ae5669.b80ac2"]]},{"id":"35ae5669.b80ac2","type":"function","z":"d9034166.46b908","name":"返却値をセット","func":"msg.data2 = msg.payload[0].NAME;\nmsg.data1 = msg.payload[0].ID;\n\nreturn msg;\n","outputs":1,"noerr":0,"x":720,"y":180,"wires":[["50c91b8b.452bdc","65083ffa.9f396","602b5dd.8555d24","68ab1506.1a6eec"]]},{"id":"65083ffa.9f396","type":"template","z":"d9034166.46b908","name":"test1218b.html 出力用","field":"payload","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"<html>\n  <head>\n    <style type=\"text/css\">\n      {{{payload.css}}}\n    </style>\n  </head>\n  <body style=\"background-color: #fffafa\">\n    <div id='basic'>\n      <div id='a1'>\n        <h1>\n          製品情報検索\n        </h1>\n      </div>\n    <div id='b1'>\n      DBからの情報:ID『<b><font color=\"blue\">{{ data1 }}</font></b>』入力された文字の正式名称は『<b><font color=\"red\">{{ data2 }}</font></b>』です。\n    </div>\n    <div id='c1'>\n      <b>検索する情報を入力します</b></br>\n      <b>IDか製品名を入れてください。</b>\n      <form action=\"http://127.0.0.1:1880/test1218b\" method=\"get\">\n        <textarea name=\"msg\" cols=20 rows=1 style=\"font-size:24pt;\">おは</textarea>\n      <button type=\"submit\" name=\"submit\" value=\"送信\">\n        <font size=\"2\">表示要求を</font><font size=\"5\" color=\"red\">送信!</font>\n      </button>\n\n    </div>\n  </div>\n</body>\n</html>\n","x":940,"y":180,"wires":[["7521f0bc.829fb8"]]},{"id":"602b5dd.8555d24","type":"debug","z":"d9034166.46b908","name":"","active":true,"console":"false","complete":"data2","x":950,"y":300,"wires":[]},{"id":"68ab1506.1a6eec","type":"debug","z":"d9034166.46b908","name":"","active":true,"console":"false","complete":"data1","x":950,"y":360,"wires":[]},{"id":"2fc31d2.492cd62","type":"comment","z":"d9034166.46b908","name":"わかりにくいかもしれない解説","info":"大前提\nNode-REDのノード間で、文字や数字を受けわたす時は\nmsg.〇〇\nという形(先頭にmsg.がつく形)で渡される。\n\n―――――――――――――――――――\n【select*fromのノード】\nmsg.data1にtest1218aから渡ってきた\nテキストボックスのテキストが入る。\n\nmsg.topic の3行で\n「msg.topic = \"select * from table01 where c1 = '〇〇';\"」\nという1文をつくる。\nmsg.topicという形は、MySQLに指示を出す形である。\nここでは、table01の中でc1が〇〇という横の列を探す\nという作業をしている\n\n―――――――――――――――――――\n【db01】\nMySQLに繋がっているだけ\n前のノードから\nselect * from table01 where c1 = '〇〇';\nという指示を受け取って\n該当した一文を排出する。\n\n―――――――――――――――――――\n【返却値をセット】\nMySQLから排出された一行の中から、\n該当するものをセットする。\n\nmsg.data2 = msg.payload[0].NAME;\nmsg.data1 = msg.payload[0].ID;\n\n―――――――――――――――――――\n【出力用】\n\n{{ data1 }} = msg.data1\n{{ data2 }} = msg.data2\n\nということ。","x":170,"y":60,"wires":[]},{"id":"9bb906f6.24d9e8","type":"function","z":"d9034166.46b908","name":"select*from","func":"msg.data1 = msg.payload.msg;\nmsg.topic = \"select * from table01 where ID = \\u0027\";\nmsg.topic += msg.payload.msg;\nmsg.topic += \"\\u0027;\";\n//msg.topic = \"select name from table01 where c1 = 'http';\";\nreturn msg;","outputs":1,"noerr":0,"x":310,"y":320,"wires":[["7edc5dc7.ba9c04"]]},{"id":"bb9941e4.fc8c4","type":"comment","z":"d9034166.46b908","name":"入力の種類ごとにselect*from以降のフローが必要かも","info":"入力種類\n・id\n・name\n・c1\nなど、カラム名\n\n\n―――――――――――――――――――\nselect*from\nの中でif分岐を使いたいけど、今の知識じゃ無理そうです。\n\n代替案\n入力htmlに、チェックボックス(var checkbox)を用意して\nid→1\nname→2\nc1→3\nが出力されるようにする(できるかわからんけど)\n\nselect*fromのノードの中で\nif (checkbox = 1) {\n    msg.topic = ウンタラカンタラ\n} else if (checkbox = 2) {\n    msg.topic = ウンタラカンタラ\n} else if (checkbox = 3) {\n    msg.topic = ウンタラカンタラ\n}","x":440.40000915527344,"y":271.90000915527344,"wires":[]},{"id":"7edc5dc7.ba9c04","type":"mysql","z":"d9034166.46b908","mydb":"c84755b6.ca03f8","name":"","x":450,"y":320,"wires":[["98a2f9b3.57801"]]},{"id":"c84755b6.ca03f8","type":"MySQLdatabase","z":"","host":"127.0.0.1","port":"3306","db":"db01","tz":""}]

スクリーンショット 2018-01-31 19.29.36.png

3.MySQLを接続

スクリーンショット 2018-01-31 19.22.27.png

db01のMySQLノードを接続してください。

4.検索ワードをMySQLにぶつける

スクリーンショット 2018-01-31 19.24.20.png
これの中身
スクリーンショット 2018-01-31 19.24.35.png
ここを、検索ワードに対応する表のタイトルにします。
この場合は、IDNAMEc1です。検索ワードと対応させてください。

クリックでわかりにくい解説
MySQLのノードに情報を渡すときはmsg.topic = 〇〇という形でないといけない。
msg.data1にtest1218aから渡ってきたテキストボックスのテキストが入る。
msg.topic の3行で
「msg.topic = "select * from table01 where c1 = '〇〇';"」
という1文をつくる。
「ここでは、table01の中でc1が〇〇という横の列を探す」
という作業をしている

5.返却値をセットする

スクリーンショット 2018-01-31 19.30.36.png
これの中身
スクリーンショット 2018-01-31 19.31.06.png

msg.任意の名前 = msg.payload[0].表のタイトル;
という形にする。
任意の名前とはいいつつ、次で使うので気をつけてください。

6.任意の名前を表示する

スクリーンショット 2018-01-31 19.39.09.png
これの中身
スクリーンショット 2018-01-31 19.38.57.png
の、data1data2は、前項#5 で作った任意の名前

クリックでわかりにくい解説
htmlの中身でnode-redのmsg.hogeを表示するには、{{}}で括って、{{hoge}}とする。

7.Intの数字を計算させる

スクリーンショット 2018-01-31 19.30.36.png
の中身を以下のようにアップデートします。
スクリーンショット 2018-01-31 19.55.22.png

クリックでわかりにくい解説
IDが1のとき……実際にはこう動いています。
6行目:price = 1
7行目:price = 1 + 1
8行目:msg.data1 = 2
(priceはお好きな名前で大丈夫です。)

多分これでいいかんじになる…

3
5
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
5