如何在Node.js中监听Firebird数据库触发的自定义事件
Firebird事件在Node.js中的正确监听实现
你的原有代码错误在于直接对db实例监听自定义的new_orc事件,但node-firebird的所有数据库事件都会统一触发名为event的事件,且需要你先显式调用addEvent方法注册你要监听的Firebird服务端事件名称,否则底层不会处理对应事件的推送。
正确实现代码
const Firebird = require('node-firebird'); // 替换为你实际的数据库连接配置 const options = { host: '127.0.0.1', port: 3050, database: '/path/to/your/database.fdb', user: 'SYSDBA', password: 'masterkey' }; Firebird.attach(options, function(err, db) { if (err) throw err; // 1. 显式注册要监听的服务端事件 db.addEvent('new_orc', function(err) { if (err) throw err; console.log('new_orc事件监听注册成功'); }); // 2. 监听统一的event事件,判断事件名处理对应逻辑 db.on('event', function(eventName, triggerCount) { if (eventName === 'new_orc') { console.log(`收到new_orc事件,距离上次收到后累计触发次数:${triggerCount}`); // 此处编写你的业务处理逻辑 } }); // 进程退出时释放连接 process.on('SIGINT', () => { db.detach(); process.exit(); }); });
注意事项
- 回调中的
triggerCount是Firebird返回的累计触发次数:如果事件短时间内多次触发,Firebird会合并推送,返回从上次推送后到当前的总触发次数,你可以根据业务需要做对应处理。 - 需要停止监听某个事件时,调用
db.removeEvent('new_orc', callback)即可释放对应监听。 - 确保服务器防火墙没有拦截Firebird的3050端口通信,事件推送会复用当前的数据库连接,不需要额外开放端口。
- 触发器本身逻辑正确,只要ORC表有新数据插入就会触发
new_orc事件,排查问题时可以先手动插入测试数据确认数据库侧事件正常推送。
内容的提问来源于stack exchange,提问作者Eduardo
相关产品推荐
相关产品推荐

