2016-09-26 15 views
2

У меня есть некоторые проблемы, связанные с поиском в базе данных LDAP с использованием LDAPjs. Я не очень хорошо знаком с LDAP, и из-за этого мне может не хватать чего-то в реализации клиента. Проблема заключается в том, что после некоторого периода времени LDAP не реагирует на сервер LDAP, только ни один из вызывающих вызовов не вызван.ldapjs время подключения после определенного периода времени

const ldapClient = ldap.createClient({ 
     url: 'ldap://some.ldap.server', 
     timeout: 3000, 
     connectTimeout: 6000 
    }); 

    ldapClient.search('c=XX', opts, (err, res) => { 
    if (err) { 
     ldapClient.unbind(function(err) { 
     if (err) { 
      console.log(err) 
     } 
     }); 
     return next(null); 
    } 
    res.once('searchEntry', (entry) => { 
    ldapClient.unbind(function(err) { 
     if (err) { 
     console.log(err) 
     } 
    }); 
    return next(entry); 
    }); 

    res.on('error', (error) => { 
    ldapClient.unbind(function(err) { 
     if (err) { 
     console.log(err) 
     } 
    }); 
    return next(null, new Error(error.message)); 
    }); 
}); 

ответ

1

Пропустите reconnect флаг как true при создании клиента LDAP и не отвязать его в том, что вы сделали. Думаю, это также мешает пересоединению. Отвяжите его только после успешной операции поиска.

Этот код работает для меня: (Значения фиктивная конечно)

var ldap = require('ldapjs'); 
var tlsOptions = { 
    host: 'example.com', 
    port: '636', 
    ca: [fs.readFileSync('./path/to/cert.pem')] 
}; 
var client = ldap.createClient({ 
    url: 'ldaps://example.com:636', 
    reconnect: true 
    tlsOptions: tlsOptions 
}); 

client.bind(username, password, function (err) { 
    if (err) { 
     console.log('Error occurred while binding'); 
    } else { 
     var base = 'cn=admin,dc=example,dc=com'; 
     var search_options = { 
      scope: 'sub', 
      filter: '(&(objectClass=*)(CN=' + username + '))', 
      attrs: 'attrs' 
     }; 
     client.search(base, search_options, function (err, res) { 
      if (err) { 
       console.log('Error occurred while ldap search'); 
      } else { 
       res.on('searchEntry', function (entry) { 
        console.log('Entry', JSON.stringify(entry.object)); 
       }); 
       res.on('searchReference', function (referral) { 
        console.log('Referral', referral); 
       }); 
       res.on('error', function (err) { 
        console.log('Error is', err); 
       }); 
       res.on('end', function (result) { 
        console.log('Result is', result); 
       }); 
      } 
     }); 
    } 
});