Искать в ldapjs

Я пытаюсь использовать метод поиска Ldap.js в моем коде node.js. Вот мой код для клиентской части. Он успешно добавляет пользователя, но поиск вновь добавленного пользователя не дает никаких результатов. (Сервер ldap работает в контейнере докеров из https://github.com/osixia/docker-openldap)

var ldap = require("ldapjs");
var assert = require("assert");

var client = ldap.createClient({
  url: "ldap://localhost:389",
});

client.bind("cn=admin,dc=example,dc=org", "admin", function (err) {
  assert.ifError(err);
  let newUser = {
    cn: "userId7",
    userPassword: "password",
    objectClass: "person",
    sn: "efub",
  };
  // Here i successfully add this user "userId7"
  client.add(
    "cn=userId7,dc=example,dc=org",
    newUser,
    (err, response) => {
      if (err) return console.info(err);
      return response;
    }
  );

  var options = {
    filter: "(objectClass=*)",
    scope: "sub",
  };
  // Now the search, it runs without error, but does never receive a searchEntry
  client.search(
    "cn=userId7,dc=example,dc=org",
    options,
    function (error, search) {
      console.info("Searching.....");

      client.on("searchEntry", function (entry) {
        console.info("I found a result in searchEntry");
      });

      client.on("error", function (error) {
        console.error("error: " + error.message);
      });

      client.unbind(function (error) {
        if (error) {
          console.info(error.message);
        } else {
          console.info("client disconnected");
        }
      });
    }
  );
});

client.on('error', function (err) {
  if (err.syscall == "connect") {
    console.info(err);
  }
});

Кроме того, если это поможет, вот как выглядит недавно добавленный пользователь, когда я отображаю всех пользователей из ldap, запустив docker exec my-openldap-container ldapsearch -x -H ldap://localhost:389 -b dc=example,dc=org -D "cn=admin,dc=example,dc=org" -w admin

# userId7, example.org
dn: cn=userId7,dc=example,dc=org
cn: userId7
userPassword:: cGFzc3dvcmQ=
objectClass: person
sn: efub

Обновление: я могу успешно найти пользователя «userId7» с помощью команды оболочки: docker exec ldap-service ldapsearch -LLL -x -D "cn=admin,dc=example,dc=org" -w "admin" -b "cn=userId7,dc=example,dc=org" "(objectclass=*)". Как я могу сделать так, чтобы ldapJS также успешно выполнял этот поиск?

Обновление 2: я также могу успешно выполнять поиск с помощью внешнего интерфейса «phpLDAPadmin», как показано на снимках экрана ниже:

«Не работает» — это не описание ошибки. Можете ли вы быть конкретным?

Tomalak 14.12.2020 09:43

Спасибо за отзыв, я добавил следующее: «Код успешно добавляет пользователя, но поиск вновь добавленного пользователя не дает никаких результатов».

malte238749874 14.12.2020 09:54
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
2
1 468
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Итак, я решил это. Правильный код client.search:

  client.search(
    "cn=userId7,dc=example,dc=org",
    options,
    function (error, res) {
      console.info("Searching.....");

      res.on("searchEntry", function (entry) {
        console.info("I found a result in searchEntry", JSON.stringify(entry.object));
      });

      res.on("error", function (error) {
        console.error("error: " + error.message);
      });

      client.unbind(function (error) {
        if (error) {
          console.info(error.message);
        } else {
          console.info("client disconnected");
        }
      });
    }
  );

Внутри function (error, res) { я прослушивал события через client.on("searchEntry", а не res.on("searchEntry", поэтому пропустил события из результатов поиска. Основной причиной была классическая ошибка копирования и вставки и изменение переменной при неправильном понимании происхождения события.

Другие вопросы по теме