繁体   English   中英

已经调用了NodeJS错误回调

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM