捕捉事件firebird与nodejs不工作

我使用NVM安装了nodejs,以便能够使用不同的版本。

然后按照这些说明安装Firebird。

后来我按照本教程底部的说明来捕捉事件。

基本上它增加了一个触发器,使“post_event”。

SQL> SET TERM !! ; SQL> CREATE TRIGGER new_employee_event FOR employee CON> ACTIVE CON> AFTER UPDATE CON> AS CON> BEGIN CON> POST_EVENT 'update_employee'; CON> END!! SQL> SET TERM ; !! 

这里是我用于听事件的代码:

 var fb = require("firebird"); var http=require('http'); var sys=require('sys'); var con = fb.createConnection(); con.connectSync('localhost:/var/lib/firebird/2.5/data/employee.fdb','sysdba','masterkey',''); con.addFBevent("update_employee"); con.on("fbevent",function(event,count){ var rows = null; rows = con.querySync("select * from EMPLOYEE WHERE EMP_NO = 145;").fetchSync(1,true); con.commitSync(); console.log("An Employee record has been updated"); console.log(rows); }); WaitForFinish(function(){ return finished; }, function(){ con.disconnect(); CleanUp(); test.done(); }, 20000); var finished = false; function WaitForFinish(finished,clean,timeout){ var timedout = false; var tid = setTimeout(function(){ timedout = true; },timeout); process.nextTick(function loop(){ if(finished.call()||timedout){ clearTimeout(tid); clean.call(); } else process.nextTick(loop); }); } 

这是我用来生成一个事件的代码。

 var fb = require("firebird"); sys = require("sys"); var con = fb.createConnection(); con.connectSync('localhost:/var/lib/firebird/2.5/data/employee.fdb','SYSDBA','masterkey',''); con.querySync("UPDATE EMPLOYEE SET SALARY = 32004 WHERE EMP_NO = 145 "); con.commitSync(); var res = con.querySync("select * from EMPLOYEE WHERE EMP_NO = 145" ); var rows = res.fetchSync("all",true); console.log(sys.inspect(rows)); 

我的节点版本是:

 node -v v0.12.13 

我的操作系统是:

 uname -r 4.2.0-35-generic 

问题是,根本不起作用。 没有错误。

我不知道要做更多的事情。 我需要为一个项目捕捉事件。

在Firebird中,连接需要通过名字来订阅事件,没有订阅意味着没有通知。 您正在注册事件update_employee ,而从触发器中发布的事件是employee_updated 。 所以你永远不会收到通知,因为没有名称为update_employee事件。

你需要改变你的代码

 con.addFBevent("employee_updated"); // <-- event name used in trigger con.on("fbevent", function(event,count){ // ... your event handling }); 

据我可以从文档中知道,只有一个事件处理函数,所以如果你想处理多个事件,你需要添加基于event (这是event的名称)的逻辑。