我使用NVM安装了nodejs,以便能够使用不同的版本。
然后按照these instructions安装Firebird。
稍后我按照this tutorial底部的说明捕捉事件。
基本上它添加了一个触发器,使得" post_event"。
// loop through each available ID
for(String ID : availableIdCollection){
// print table headers here
// loop through students array
for(Student s : studentCollection){
// print students data here
}
}
以下是我用于侦听事件的代码:
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
问题在于根本不起作用。没错。
我不知道该怎么做。我需要抓住项目的事件。
答案 0 :(得分:1)
在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
});
据我所知the documentation,只有一个事件处理函数,所以如果你想处理多个事件,你需要添加基于event
的逻辑(这就是名字)事件)。