我想将异步数据发送到配置中的节点。我想执行一个SQL请求以列出中的一些数据。
创建节点时,将执行服务器端功能
完成后,回调将数据发送到节点配置
在节点配置上,当接收到数据时,将创建列表
另外,二进制文件可以每隔x分钟请求数据库并创建一个缓存,每个节点将在创建时使用该缓存,这将删除代码的异步部分,即使不再“实时更新”也是如此。
实际上,我陷入困境是因为我创建了查询并将其添加如下:
module.exports = function(RED) { "use strict"; var db = require("../bin/database")(RED); function testNode(n) { // Create a RED node RED.nodes.createNode(this,n); // Store local copies of the node configuration (as defined in the .html var node = this; var context = this.context(); this.on('input', function (msg) { node.send({payload: true}); }); } RED.nodes.registerType("SQLTEST",testNode); }
但是我不知道如何将数据传递到配置节点。我想到了Socket.IO可以做到这一点,但这是一个好主意并且可用吗?你知道什么解决方案吗?
Node-RED中使用的标准模型用于节点注册其自己的admin http端点,该端点可用于查询其所需的信息。您可以在“串行”节点上看到此操作。
串行节点编辑对话框列出了当前连接的串行设备供您选择。
节点在此处注册管理端点:https : //github.com/node-red/node-red-nodes/blob/83ea35d0ddd70803d97ccf488d675d6837beeceb/io/serialport/25-serial.js#L283
RED.httpAdmin.get("/serialports", RED.auth.needsPermission('serial.read'), function(req,res) { serialp.list(function (err, ports) { res.json(ports); }); });
关键点:
选择一个命名空间为您的节点类型的URL-这样可以避免冲突
该needsPermission
中间件是有,以确保只有合法的用户才能访问端点。许可应采用形式
。
然后其编辑对话框从此处查询该端点:https : //github.com/node-red/node-red-nodes/blob/83ea35d0ddd70803d97ccf488d675d6837beeceb/io/serialport/25-serial.html#L240
$.getJSON('serialports',function(data) { //... does stuff with data });
关键点:
此处的网址不得以开头/
。这样可以确保相对于从何处提供编辑器都可以发出请求-您不能假定从那里提供该请求/
。