Some crypto utilities
npm install node-red-contrib-lg-utils隆感科技
encrypt
插入然后 encrypt 整体对象
取值为msg.payload.crypto
- pgsql:在全局上下文注册数据库访问对象 pgModel(不输出消息)
- socketIo:监听 Socket.IO 事件并按统一格式输出
请在 Node-RED 中安装或放置本包后,重启 Node-RED 使节点生效。
const pgModel = global.get('pgModel');const rows = await pgModel.query(
'SELECT * FROM users WHERE id IN ($(ids:value)) AND status = $(status)',
{ ids: [1,2,3], status: 'active' }
);
msg.payload = rows;
return msg;
`
说明:- SQL 中的 $(path) 将被替换为 $1,$2,...,并从 lists 中取值。
- 当 path 对应数组时(例如 ids),会自动展开为多个占位符。
- $(path:任意标识) 也会触发数组展开,其中冒号后的标识仅用于标记,不影响解析逻辑。
2. 1.
新增单条记录 add
`
const pgModel = global.get('pgModel');const inserted = await pgModel.add('user', { name: 'xxx', pwd: 'yyy' });
// 返回插入后的记录(使用 RETURNING *)
msg.payload = inserted;
return msg;
`
3. 1.
批量新增 addMany
`
const pgModel = global.get('pgModel');const insertedMany = await pgModel.addMany('user', [
{ name: 'xxx', pwd: 'yyy' },
{ name: 'xxx1', pwd: 'yyy1' }
]);
// 返回插入后的记录列表
msg.payload = insertedMany;
return msg;
`
4. 1.
更新 update
`
const pgModel = global.get('pgModel');const updated = await pgModel.update(
'user',
{ id: '111' }, // where 条件
{ name: 'xxx', pwd: 'yyy' } // 更新数据
);
// 返回更新后的记录(使用 RETURNING *)
_complex 自定义查询条件(where)
msg.payload = updated;
return msg;
`
5. 1.
删除 delete
`
const pgModel = global.get('pgModel');const deleted = await pgModel.delete('user', { id: '111' });
// 返回被删除的记录(使用 RETURNING *)
msg.payload = deleted;
return msg;
`
$3
- 每次调用会创建一个短连接,执行完毕后自动关闭。
- 表名与列名会进行安全校验与引用(仅允许字母、数字、下划线且不得以数字开头),当前版本不支持 schema.table 形式;如需支持 schema,可在后续版本中扩展。
- 值一律通过参数占位符传入,避免注入风险。
$3
- 取不到 pgModel:
- 确认流程中已放置并部署了一个 pgsql 节点且配置信息正确。
- 重启 Node-RED 后,等待节点加载再获取 global.get('pgModel')。
- SQL 中占位符不生效:
- 确认使用了 $(path) 语法,并在 lists 中提供了对应 path 的值。
- 数组占位请确保 path 对应值为数组(可写成 $(ids) 或 $(ids:any) 等,带冒号同样会触发展开)。
socketIo 节点
$3
- 在 Node-RED 内置的 HTTP 服务器上复用(共享)一个全局唯一的 Socket.IO Server。
- 你可以在每个 socketIo 节点上配置要监听的事件名(逗号分隔),当这些事件被任何客户端触发时,该节点会向下游输出格式统一的消息。
$3
- 事件标识(codes):逗号分隔的事件名,如 message,chat,notify
注意:当前实现中,如果 codes 留空,则不会监听任何事件。若需要监听 message,请明确填写 message。$3
- 当任一配置的事件被触发,节点输出:
`
msg.payload = {
code: <事件名>,
data: <事件数据> // 单个参数时为该参数;多个参数时为数组 [arg1, arg2, ...]
}
`
$3
- 复用全局 io 实例:节点会先从全局上下文获取 io 实例,若不存在则基于 RED.server 创建并缓存,避免重复 handleUpgrade/attach 冲突。
- 多节点订阅管理:每个 socketIo 节点将自己的订阅 {node, codes} 注册到全局订阅表中。
- 按连接分发:为每个连接仅绑定一次 client.onAny 分发器,触发时遍历订阅表,将匹配事件分发到对应节点。
- 节点关闭清理:节点关闭时会从订阅表移除自身,避免内存泄漏。
$3
- 客户端与 Node-RED 的 HTTP 服务同域同端口时,可直接:
`
// 浏览器
const socket = io(); // 或 io(window.location.origin)
socket.emit('message', { hello: 'world' });
`
- 分发到 Node-RED 后,如某个 socketIo 节点 codes 配置中包含 message,就会下发:
`
msg.payload = { code: 'message', data: { hello: 'world' } }
``