gpt4 book ai didi

node.js - 使用 Nodejs 捕获事件 firebird 不起作用

转载 作者:太空宇宙 更新时间:2023-11-03 22:12:48 24 4
gpt4 key购买 nike

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

然后按照these instructions安装Firebird .

后来我按照this tutorial底部的说明进行操作捕获事件。

基本上它添加了一个触发“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 版本是:

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
});

据我所知 the documentation ,只有一个事件处理函数,所以如果要处理多个事件,需要根据event(即事件的名称)添加逻辑。

关于node.js - 使用 Nodejs 捕获事件 firebird 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37096917/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com