2015-06-12 27 views
5

Tôi đã đăng nội dung nào đó tương tự tại đây: Use ldapjs with promise. Thật không may, nó vẫn chưa được giải quyết.Sử dụng ldapjs với lời hứa bluebird

Lần này tôi đã thử màu xanh và hy vọng tôi có thể nhận được một số may mắn.

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

Tập lệnh không xuất được gì. Nó đang đợi thứ gì đó trong nhà ga.

Trả lời

4

Sử dụng lời hứa Bluebird, cách dễ dàng để thực hiện việc này là tạo ứng dụng khách bình thường, sau đó chạy promisifyAll() trên máy khách.

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

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

Promise.promisifyAll(client); 

Bây giờ bạn có thể gọi client.addAsync() và client.searchAsync() và như vậy.

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); 
    }); 
} 
Các vấn đề liên quan