【发布时间】:2017-08-03 10:28:58
【问题描述】:
我正在使用 Node JS 服务器和 firebird 数据库开发 Cordova 应用程序。 这两个数据库存在,我可以通过 isql-fb 连接它。
当我通过电话创建第一个连接时,连接以及在此连接上完成的查询都有效。
但是,当我创建第二个连接时,它不起作用。
这是我的代码:
连接表,将连接重新组合为 ["username", connexion] 表
var connectionTable = [];
连接数据库并在connectionTable中添加连接的函数:
function connectionToDB(username, password, dbAddress){
var con = fb.createConnection();
con.connectSync(dbAddress, username, password, '');
var newConnection = [username, con];
connectionTable.push(newConnection);
console.log('connection finished'); //it is displayed for both connections so I think it works
};
通过输入的用户名返回所需连接的函数:
function getConnection(username){
for(x in connectionTable){
if(connectionTable[x][0]==username) {
return connectionTable[x][1];
}
else {console.log("No connection found with username : " + username); return 0;}
}
};
然后,在我的节点 JS 服务器上,我有这个“路线”:
app.get('/checkAccount/:username', function(req, res){
console.log("checkAccount avant body");
console.log(req.params);
var usernameAsking = req.params.username;
console.log("usernameAsking = " + usernameAsking); //returns username in both cases
var connexionLinked = getConnection(usernameAsking);
console.log(typeof connexionLinked);
console.log(connexionLinked);
if(connexionLinked == 0) console.log("Problem. No linked connexion found");
else console.log("connexion found");
var query = connexionLinked.querySync("SELECT * from shops");
var rows = query.fetchSync('all', true);
console.log(sys.inspect(rows));
var shopNameString = JSON.stringify(rows);
console.log("string : " + shopNameString);
res.send(shopNameString);
});
所以对于与数据库的第一次连接,它工作得很好,并且确实返回了它的数据库的值。
但是,它不适用于第二个不同的连接,它说它等于 0,所以我假设它在 GetConnection 中没有找到它。
我不明白为什么它适用于一个而不适用于另一个......我之前也尝试连接到几个不同的连接,而不是这个过程并且它有效。所以问题不在于我们不能在同一个 NodeJS 服务器上拥有多个连接,而是在这种情况下,我们显然找不到好的连接......
有人知道我做错了什么吗?
任何帮助将不胜感激,谢谢。
-- 编辑--
连接以这种方式工作。错误出现在 getConnection(username) 的 for 循环中。如果有人试图做一个连接表,我会把这篇文章放在这里。
谢谢大家。
【问题讨论】:
-
所以您的
usernameAsking是正确的(存在于数组中)并且您的2 个日志显示number和0? -
是的,这是控制台显示的内容:在这两种情况下:
-
first : checkAccount avant body { username: 'BARBARA' } usernameAsking = BARBARA object Connection { inAsyncCall: false, inTransaction: false, connected: true } connexion found [ { /*显示正确数据*/ } ] string : [{/*正确的数据也*/}] checkAccount 结束
-
我会建议转向非阻塞方式,有可能在创建第二个连接的过程中你的节点进程被阻塞了,并且没有创建任何连接,检查你的第二个连接是否真的创建了。
-
请编辑您的问题,而不是在 cmets 中添加相关详细信息。并请显示您正在使用的连接字符串。
标签: javascript node.js database cordova firebird