微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ldapjs搜索方法中的错误处理方法

如何解决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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?