ldapjs连接在一段时间后超时

我有一些关于使用LDAPjs的LDAP存储库中的searchEntry的问题。 我不熟悉LDAP,因此我可能会在客户端实现中丢失一些东西。 问题是,在一段时间后LDAP没有来自LDAP服务器的响应,没有任何callback被调用。

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)); }); }); 

在创buildLDAP客户端时将reconnect标志设置为true ,并且不要以您所做的方式解除绑定。 我想这也阻碍了重新连接。 只有在search成功后才能取消绑定。

这段代码适用于我:(这些值当然是假的)

 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); }); } }); } });