在for loop MySQL Node.js内切换数据库,切换速度不够快/重叠?
在Node.js中切换数据库(所有数据库都位于同一个连接上)时出现问题 这里是我的代码: Db.js设置(可能不重要,但认为应该包括它): 但是,输出如下所示:在for loop MySQL Node.js内切换数据库,切换速度不够快/重叠?,mysql,node.js,express,Mysql,Node.js,Express,在Node.js中切换数据库(所有数据库都位于同一个连接上)时出现问题 这里是我的代码: Db.js设置(可能不重要,但认为应该包括它): 但是,输出如下所示: RowDataPacket { 'Database()': 'new' } RowDataPacket { 'Database()': 'tss' } RowDataPacket { 'Database()': 'tss' } RowDataPacket { 'Database()': 'tss' } RowDataPacket {
RowDataPacket { 'Database()': 'new' }
RowDataPacket { 'Database()': 'tss' }
RowDataPacket { 'Database()': 'tss' }
RowDataPacket { 'Database()': 'tss' }
RowDataPacket { 'Database()': 'tss' }
[
[ RowDataPacket { parameter_value: '1' } ],
'new',
[ RowDataPacket { parameter_value: '1' } ],
'joeys',
[ RowDataPacket { parameter_value: '1' } ],
'rvw',
[ RowDataPacket { parameter_value: '1' } ],
'sfx',
[ RowDataPacket { parameter_value: '1' } ],
'tss'
]
以上只是它随机选择的众多变化之一,所有时间都是可以进行第一次切换的,但如果成功或失败,以下切换是随机的。我究竟该如何修复这个错误。我已经花了好几天的时间在这上面了,我快发疯了。有人请帮忙
编辑:自2020年5月27日起,我有一个临时解决方案,但仍在寻找解决方案,以了解发生这种情况的原因和解决方法。与其切换,为什么不保持两个连接,并使用一个函数返回用于给定任务的连接?你在这里操作一个全局变量,这是一个糟糕的形式。我不知道怎么做,你能详细说明或显示一些代码吗。而且,它不只是两个连接,它的连接可能会超过50个或100个,这取决于这个应用程序的规模有多大。每个端点都有一个打开的连接池,并有一个签出和返回连接的功能。还要注意在应该在
schoolCode
的位置执行类似于`${schoolCode}`
的操作。不需要一个包含一个东西的模板字符串。嘿,伙计们,我改变了设置,这样它就可以为每个数据库创建一个新的连接,现在它可以正常工作了。所有这些数据库连接都存储在一个对象中,我可以使用schoolCode
进行引用。它现在可以工作了,只是想知道这是否是做事情的正确方法,而不是切换,为什么不保持两个连接并使用一个函数来返回用于给定任务的连接?你在这里操作一个全局变量,这是一个糟糕的形式。我不知道怎么做,你能详细说明或显示一些代码吗。而且,它不只是两个连接,它的连接可能会超过50个或100个,这取决于这个应用程序的规模有多大。每个端点都有一个打开的连接池,并有一个签出和返回连接的功能。还要注意在应该在schoolCode
的位置执行类似于`${schoolCode}`
的操作。不需要一个包含一个东西的模板字符串。嘿,伙计们,我改变了设置,这样它就可以为每个数据库创建一个新的连接,现在它可以正常工作了。所有这些数据库连接都存储在一个对象中,我可以使用schoolCode
进行引用。它现在起作用了,只是想知道这是否是正确的做事方式
app.get('/getMatModes', function(req, res){
assure_api.query("SELECT client_id FROM license", (err, result) => {
if(err){
throw err;
}
else {
let schools = result;
let temp = schools
schools = [];
for(let i=0; i < temp.length; i++){
schools.push(temp[i].client_id)
}
let matModes = [];
async.forEachOf(schools, function(dataElement, i, inner_callback){
let query = `SELECT parameter_value FROM parameter_data where parameter_name='maintenance_mode'`
let schoolCode = dataElement;
dbConnections[tenantTable[`${schoolCode}`]].query(`USE ${schoolCode}`, () => {
/*this is the line trying to debug which database is being looked at, because the values being
returned in the query below were just simply wrong.*/
dbConnections[tenantTable[`${schoolCode}`]].query(`SELECT Database()`, (err, result) => {
console.log(result[0])
})
dbConnections[tenantTable[`${schoolCode}`]].query(query, (err, result) => {
if(err){
inner_callback(err)
}
else {
matModes.push(result, schoolCode)
inner_callback(null)
}
})
})
},
function(err){
if(err){
throw err;
}
else{
console.log(matModes)
}
}
)
}
})
})
RowDataPacket { 'Database()': 'new' }
RowDataPacket { 'Database()': 'joeys' }
RowDataPacket { 'Database()': 'rvw' }
RowDataPacket { 'Database()': 'sfx' }
RowDataPacket { 'Database()': 'tss' }
[
[ RowDataPacket { parameter_value: '1' } ],
'new',
[ RowDataPacket { parameter_value: '1' } ],
'joeys',
[ RowDataPacket { parameter_value: '0' } ],
'rvw',
[ RowDataPacket { parameter_value: '0' } ],
'sfx',
[ RowDataPacket { parameter_value: '1' } ],
'tss'
]
RowDataPacket { 'Database()': 'new' }
RowDataPacket { 'Database()': 'tss' }
RowDataPacket { 'Database()': 'tss' }
RowDataPacket { 'Database()': 'tss' }
RowDataPacket { 'Database()': 'tss' }
[
[ RowDataPacket { parameter_value: '1' } ],
'new',
[ RowDataPacket { parameter_value: '1' } ],
'joeys',
[ RowDataPacket { parameter_value: '1' } ],
'rvw',
[ RowDataPacket { parameter_value: '1' } ],
'sfx',
[ RowDataPacket { parameter_value: '1' } ],
'tss'
]