[英]NodeJS Error Callback was already called
我知道此错误存在,并且我尝试阅读该代码,但我总是收到此错误:回调已被调用。
我的代码是:
switch(data.type) {
case 1:
console.log('blablabla');
break;
case 2:
/* SSH - login */
pool.query('SELECT INET_NTOA(ip) AS ip, pass, server FROM servers WHERE id=?',[data.id], function(err, rows, fields){
/* SSH - connection */
conn.connect({
host: rows[0].ip,
port: '22',
username: 'root',
password: decrypt(rows[0].pass, password)
})
/* SSH - ready */
conn.on('error', function(err) {
/* SSH - connection failed */
return callback('Login To <b>'+rows[0].server+'</b> Failed!');
})
conn.on('end', function() {
/* SSH - closed */
console.log('ssh closed...')
})
conn.on('ready', function() {
console.log('ready to execute terminal commands...')
})
})
break;
})
我第一次调用此函数,它可以正常工作
Login To Server Failed!
我再次调用此函数,但出现此错误:
Error: Callback was already called.
完成console.log之后,我看到第二次调用此函数两次,所以这就是有关回调的错误得到的原因...所以,问题是我尝试将回调函数置于conn.on外部和内部,但是第二次那就是所谓的函数,我总是得到这个错误。在哪里需要放置回调,以便函数不会被调用两次?
更新问题:
我看到当我将console.log添加到错误并关闭事件时,每次我调用此函数时,都会再发生一个事件错误并关闭事件...请参阅以下内容:
第一次调用此函数,我得到:
calling ssh...
error connecting to server...
ssh closed...
第二个调用函数:
calling ssh...
error connecting to server...
error connecting to server...
ssh closed...
ssh closed...
第三次调用函数:
calling ssh...
error connecting to server...
error connecting to server...
error connecting to server...
ssh closed...
ssh closed...
ssh closed...
那么SSH2节点js库中是否存在错误,或者我做错了什么?
事件侦听器以数组的形式组织; 关于您的代码,对象<< conn >>在您使用的方法外部。 两次调用时,将一个新的侦听器添加到对象conn的侦听器数组中,使两个侦听器<<。on('error',... >>而不是一个。请参见下图( https: //nodejs.org/api/events.html )
因此,您只需要在与对象建立连接之前初始化对象<< conn >>,以确保仅影响一个监听器<< on('error',... >>。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.