Javascript 已调用NodeJS错误回调

Javascript 已调用NodeJS错误回调,javascript,node.js,Javascript,Node.js,我知道这里存在这个错误,我试着去读那个代码,但我总是得到这个错误:回调已经被调用了 我的代码是: 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]

我知道这里存在这个错误,我试着去读那个代码,但我总是得到这个错误:回调已经被调用了

我的代码是:

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;
    })
我再次调用此函数,出现以下错误:

Error: Callback was already called.
在执行console.log之后,我看到第二次调用这个函数时,它被调用了两次,所以这就是为什么这个关于回调的错误会出现…所以问题是我试图将回调放在conn.on函数的外部和内部,但是第二次调用这个函数时,我总是会遇到这个错误..回调需要放在什么地方,以便函数不会被调用两次

更新问题:

当我将console.log添加到error and close event时,我发现每次调用此函数时,都会得到一个事件error and close called…请参见:

第一次调用此函数时,我得到:

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...
第三次调用函数:

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库中是否存在bug,或者我正在做错事?

事件侦听器被组织为一个数组;关于代码,对象>位于所用方法的外部。当您两次调用它时,您将向对象conn的侦听器数组添加一个新的侦听器,使两个侦听器而不是一个。见下图()

因此,您只需要在与对象建立连接之前初始化对象>,以确保只有一个侦听器>受到影响


谢谢…你非常聪明…我在node工作了半年左右,从来没有想过..我刚刚在这个函数中添加了一个本地新的conn,用于ssh2,现在工作正常..我刚刚添加了conn=new client();现在一切都很好。在每个新的请求上,都会创建新的连接,并且一切都正常…谢谢。只是想问一下,每次调用conn=new client()函数时,是否可以创建该函数;或者最好从内存中删除previus conn,然后创建一个新的?个人,我认为您不需要删除该对象。谢谢..我保持原样…现在工作正常..我尝试多次单击按钮,不再出错:)