ldapjs处理client.search响应
我有下面绑定到LDAP服务器的代码,我想返回我在“受访者”组中添加了“ab”的用户(代码取自ldapjs客户端api页面)。我可以看到,我正在使用预期的EventEmitter对象从服务器返回响应。在对searchEntry对象调用logging console.log()时,我希望看到有关用户的信息。我似乎没有searchEntry对象。我的用户DN是否正确?我目前不确定问题是否与我的查询有关,我没有得到任何数据,或者我是否未能正确处理响应ldapjs处理client.search响应,ldapjs,Ldapjs,我有下面绑定到LDAP服务器的代码,我想返回我在“受访者”组中添加了“ab”的用户(代码取自ldapjs客户端api页面)。我可以看到,我正在使用预期的EventEmitter对象从服务器返回响应。在对searchEntry对象调用logging console.log()时,我希望看到有关用户的信息。我似乎没有searchEntry对象。我的用户DN是否正确?我目前不确定问题是否与我的查询有关,我没有得到任何数据,或者我是否未能正确处理响应 const client = ldap.cr
const client = ldap.createClient({ url: 'ldap://' + LDAP_SERVER + ':' + LDAP_PORT });
// Connect and bind to the Active Directory.
const connectToClient = async () => {
const secret = LDAP_SECRET_KEY;
return await new Promise((resolve, reject) => {
client.bind(LDAP_USER, secret, function (err, res) {
if (err) {
console.error(err);
reject('Failed to connect to LDAP server');
} else {
resolve('Connected to LDAP server');
}
});
});
};
onst searchADForUser = async () => {
return await new Promise((resolve, reject) => {
client.search('CN=ab,OU=interviewees,OU=Users,OU=interview,DC=interview,DC=workspace,DC=com', function (err, res) {
if (err) {
console.error(err);
reject('Error searching LDAP server');
} else {
res.on('searchEntry', function (entry) {
console.log('entry: ' + JSON.stringify(entry.object));
});
res.on('searchReference', function (referral) {
console.log('referral: ' + referral.uris.join());
});
res.on('error', function (err) {
console.error('error: ' + err.message);
});
res.on('end', function (result) {
console.log('status: ' + result.status);
});
resolve(res);
}
});
});
};
const handler = async (event) => {
try {
return responses.success(
await connectToClient().then(async function(event) {
console.log(event);
await searchADForUser().then(function(event) {
console.log(event);
}).catch(function(event) {
console.log(event);
})
}).catch(function(event) {
console.log(event);
})
);
} catch (err) {
console.error(err);
return responses.error(err);
} finally {
client.unbind();
}
};
active directory结构如下所示
我的中心问题是理解如何处理搜索函数返回的EventEmitter对象。我需要在每个searchEntry事件上添加一个数组,然后在resolve回调函数中仅在end事件发生后返回该项。上面的代码正在立即调用resolve,因此还没有处理searchEntry事件或end事件 我现在使用的代码如下:
function (err, res) {
if (err) {
console.error(err);
reject(new Error('Error retrieving users from Active Directory'));
} else {
const entries = [];
res.on('searchEntry', function (entry) {
entries.push(entry);
});
res.on('searchReference', function (referral) {
console.log('referral: ' + referral.uris.join());
});
res.on('error', function (err) {
console.error('error: ' + err.message);
});
res.on('end', function (result) {
console.log('status: ' + result.status);
if (result.status !== 0) {
reject(new Error('Error code received from Active Directory'));
} else {
resolve(entries);
}
});
}
}