将 ldapjs 与 Bluebird Promise 结合使用

2024-03-27

我在这里发布了类似的内容:使用带有 Promise 的 ldapjs https://stackoverflow.com/questions/30682597/use-ldapjs-with-promise。不幸的是,它仍然没有解决。

这次我尝试了蓝鸟,希望能获得一些好运。

// https://www.npmjs.com/package/ldapjs
var Promise = require('bluebird');
var ldap = Promise.promisifyAll( require('ldapjs') );
var config  = require('./config');
var print_r = require('print_r').print_r;


var my_filter = "(&(objectCategory=person)(objectClass=user)" + "(cn=" + 'someone' + "))";
var ldap_username = config.ad.username;
var ldap_password = config.ad.password;
var ldap_url = config.ad.url;
var ldap_dn_search = config.ad.dn_search;

process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";
ldap.Attribute.settings.guid_format = ldap.GUID_FORMAT_B;


var opts = {
  filter: my_filter,
  scope: 'sub',
};


//test
console.log(my_filter);
console.log(ldap_username);
console.log(ldap_password);
console.log(ldap_url);
console.log(ldap_dn_search);


/* NOTE: This code is working!!!
client.bind(ldap_username, ldap_password, function (err) {
  client.search(ldap_dn_search, opts, function (err, search) {
    search.on('searchEntry', function (entry) {
      var user = entry.object;
      console.log(user);
    });
  });  
});
*/

// I tried to rewrite the code above with promise
ldap.createClientAsync({
  url: ldap_url
})
.then(function(client){
  console.log('bind'); // No print
  return client.bindAsync(ldap_username, ldap_password);
})
.then(function() {
  console.log('search'); // No print
  return client.searchAsync(ldap_dn_search, opts);
})
.then(function(search) {
    // No flow here
  search.on('searchEntry', function (entry) {
    var user = entry.object;
    console.log(user);
  });
})

该脚本不输出任何内容。它正在终端等待一些东西。


使用 Bluebird Promises,执行此操作的简单方法是正常创建客户端,然后在客户端上运行 promisifyAll()。

var ldap = require('ldapjs');
var Promise = require('bluebird');

var client = ldap.createClient({
  url: 'ldap://my-server:1234',
});

Promise.promisifyAll(client);

现在您可以调用 client.addAsync() 和 client.searchAsync() 等。

client.bindAsync(secUserDn, secUserPassword)
  .then(doSearch) // if it works, call doSearch
  .catch(function (err) { // if bind fails, handle it
    console.error('Error on bind', err)
  });

function doSearch(data) {
  client.searchAsync('CN=A Test,OU=Users,DC=website,DC=com', options)
    .then(function (data) { // Handle the search result processing
      console.log('I got a result');
    })  
    .catch(function (err) { // Catch potential errors and handle them
      console.error('Error on search', err);
    });
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 ldapjs 与 Bluebird Promise 结合使用 的相关文章