我必须连接到LDAP服务器并根据特定ID查找用户。
我决定使用ldapjs模块。
我设法创建了我的客户端并绑定了他,这样我就可以成功地搜索用户。
我的问题是,因为我只使用async/await,所以我不知道如何处理回调中的错误。例如,使用ldapjs库中的以下简单代码:
public static async search(searchOptions: SearchOptions) {
LdapService.bind()
LdapService.getClient()?.search('ou=*****,ou=***,dc=****,dc=****', searchOptions, function (err, res) {
ifError(err)
res.on('searchEntry', function (entry) {
// ----------------------
// an error came from here
throw new Error('test')
// ----------------------
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);
});
})
}
- LdapService.getClient()* 是一个单例方法,它返回createClient ->的结果
- LdapService.bind()* 是一个只与服务器绑定正确凭证的方法->工作正常
我只是无法处理我的错误“测试”。我该怎么办?
搜索方法真的是异步的吗?
我可以使用async/await的方式吗?:P
PS:由于安全原因,DN字符串(“ou=,ou=,dc=,dc=”)被隐藏,代码运行良好,不会抛出错误;)
2条答案
按热度按时间fumotvh31#
对于任何经过这里并像我一样挣扎于回调的人,这里是我发现的“修复”:
什么解决了我的问题?把所有的东西都 Package 在一个承诺里。
之前所有的“res.on”方法都类似于Promise侦听器。因此,all方法搜索(我的内部)是一种异步调用。
现在我可以调用resolve/reject方法来返回数据和错误。
另外,我可以用async/await的方式调用静态搜索方法。
当你不熟悉回调的时候。。^^”
j8yoct9x2#
还有另一种方法。由于ldapjs中的Client对象是enEventEmitter,因此可以启用'captureRejections'布尔值。
详情:https://nodejs.org/api/events.html#error-events
文档示例:
在构建客户端时,您可以将此作为一个选项传递,然后.on处理程序的行为就会好得多。一旦将其添加到客户端,所有的绑定和搜索函数也会使用它。
”