originnode-red是我目前用过最好用的物联网开发工具。既可以将相关经验积累成节点,又可以灵活快速的定制化开发,快速满足用户需求。需要。美中不足的是它是用node编写的,在数据??处理和库丰富度上不如Java和Python丰富。这么好的产品,可惜中文资料太少了。2019年下半年翻译node-red手册,写系列文章。请监督。先写了数据库篇,发现node-red的文档,尤其是node模块的文档太少,导致一个简单的东西要花半天多的时间才能熟悉,而且它可以在一个小时内完成文档。MySQL、SQLServer和Oracle是最常用的三种数据库。下面就以这三个数据库为例,说说如何使用node-red来操作数据库。在node-red仓库中操作MySQL和SQLServer。目前运行MySQL的节点有3个,node-red-node-mysql、node-red-contrib-sqldbs、node-red-contrib-odbc。前两种用法类似,但node-red-contrib-sqldbs支持四种数据库:Mysql、MSsql、Postgresql和SQLLite。安装这个节点可以处理四种数据库,所以大家要选择它。配置节点在左侧面板创建一个sqldbs节点,搜索sql可以看到相关节点,向右拖动,我们得到一个sqldbs节点。配置sqldbs节点双击sqldbs节点进入配置界面,首先编辑数据库,创建数据库连接。填写的内容无非就是IP、端口、用户名、密码、数据库名。这里需要注意的是,需要在Dialect这一行选择数据库类型,Mysql、MSsql、Postgresql、SQLLite的填写内容没有区别。配置数据库操作类型。这个动作有点多余。SQL操作类型可以从SQL语句中解析出来。node-red-node-mysql不需要做这个配置。导入SQL语句sqldbs节点会从变量msg.topic中获取SQL,但其他节点的输出通常放在msq.payload中(如MQTT节点、Inject节点),从Inject节点到sqldbs节点,一个转换中间需要节点,我用的是函数节点。在Inject节点中,我注入了一个Json字符串,里面包含了我要写入的信息,也可以模拟我从其他节点获取的数据的格式。{"name":"longtt","age":21,"class_name":"401"}在函数节点中,我将json字符串信息组装到SQL语句中,替换为msgvarinsertOneStudent="INSERTINTOstudent(name,age,class_name)VALUES('%s',%d,'%s')";varnewMsg={"topic":util.format(insertOneStudent,msg.payload.name,msg.payload.age,msg.payload.class_name)}returnnewMsg;执行点击注入节点的按钮,触发注入操作。在右侧的调试信息窗口中,我们可以看到调试信息。去数据库查询,可以看到相关的数据记录已经创建成功。oracleoracle数据库操作有两个难点,一是安装麻烦,二是node文档很少。安装oracle运行节点在node-red节点仓库中,有两个节点node-red-contrib-oracledb,node-red-contrib-oracledb-mod,node-red-contrib-oracledb已过期,节点安装失败.于是我把精力投入到了节点node-red-contrib-oracledb-mod上,但是也遇到了各种问题。无法找到Oracle客户端库。配置OracleDB连接配置后,OracleDB节点会建立数据库连接,但是这个过程失败了。到119.3.59.75:1521/orcl的Oracle服务器错误连接:DPI-1047:找不到64位Oracle客户端库:“libclntsh.so:无法打开共享对象文件:没有这样的文件或目录”。帮助见https://oracle.github.io/odpi/doc/installation.html#linuxNode-oracledb安装说明:https://oracle.github.io/node-oracledb/INSTALL.html你必须有64位的OracleLD_LIBRARY_PATH中的客户端库,或使用ldconfig配置。如果您在此计算机上没有Oracle数据库,则从http://www.oracle.com/technetwork/topics/linuxx86-64soft-安装InstantClientBasic或BasicLight包092277.html这个和Oracle的律师有很大关系。我用过的所有数据库工具都需要和从Oracle官网下载的instantclient分开安装,node-red也不例外。于是去Oracle官网下载了一个instantclient(具体版本取决于你的操作系统版本),然后在我的.bashrc中加入如下配置(注意路径是我机器的路径)。重启node-red后,OracleDB节点连接成功。exportLD_LIBRARY_PATH=/root/instantclient_19_3:$LD_LIBRARY_PATHexportOCI_LIB_DIR=/root/oracle/instantclient_19_3exportOCI_INC_DIR=/root/oracle/instantclient_19_3/sdk/include配置oracle-db必须要批判的,没有oracle-db和数据库连接配置的区别sid,service-name两种模式,我的数据库使用的是service-name模式,sid模式我没有测试过。SQL查询和Fieldmappings这两个配置标签页让我很费劲。我花了一天时间,多次尝试都失败了。我建议你不要配置这两个页面。导入SQL语句和sqldbs的区别在于oracle-db的SQL语句使用msg.query,支持使用占位符从msg.payload中拼装数据。我还是使用Inject节点传入Json字符串,使用function节点进行数据组合。参考Inject节点的写法。在功能节点中,我导入了查询并替换了负载。varinsertOneStudent="插入学生(id,name,age,class_name)VALUES(:myid,:myname,:myage,:myclassname)";varnewMsg={"query":insertOneStudent,"payload":[msg.payload.id,msg.payload.name,msg.payload.age,msg.payload.class_name]}returnnewMsg;执行我写了一条Select查询语句,点击注入节点按钮,就会触发注入操作,右侧窗口的调试信息,我们可以看到查询到的信息。varSelectOneStudent="select*fromstudentwherename=:myname";varnewMsg={"query":SelectOneStudent,"payload":[msg.payload.name]}returnnewMsg;endingnode-red很了不起,后面会继续深入研究,写一些更深入的文章。需要交流的同学请在下方留言。
