如何解决ldapjs搜索方法中的错误处理方法
我必须连接到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()是一种仅使用正确凭据与服务器绑定的方法->效果很好
我只是无法处理我的错误“测试” ...我应该如何处理它?
我可以异步/等待方式吗? :P
PS :由于安全原因,DN字符串(“ ou =,ou =,dc =,dc =”)被隐藏,并且代码可以很好地工作而不会引发错误;)
解决方法
对于任何在这里经过并在回调中挣扎的人,这里就是我找到的“修复”:
public static async search(searchOptions: SearchOptions) {
// wrapping the all thing in a Promise that can be in a try/catch -> error will be handled there
return await new Promise((resolve,reject) => {
LdapService.getClient()?.search('ou=****,ou=****,dc=****,dc=****',searchOptions,function (err,res) {
if (err) {
// handle connection error I guess ?
reject(err)
}
res.on('searchEntry',function (entry) {
try {
// -------------
// Same test as before
throw new Error('test')
// -------------
resolve(JSON.stringify(entry.object))
} catch (err) {
// error must be catched to call reject method !
reject(err)
}
});
res.on('error',function (err) {
// handle API error when looking for the specific ID I guess ?
reject(err)
});
})
})
}
什么解决了我的问题?将所有内容包装在承诺中。
之前所有的“ res.on”方法都类似于Promise监听器。因此,全方法搜索(我的内部搜索)是一种异步调用。
现在,我可以调用 resolve / reject 方法来返回数据和错误。
此外,我可以通过 async / await 方法调用我的静态搜索方法。
当您不熟悉回调时... ^^“
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。