я пытаюсь запрограммировать RestfulAPI с NodeJS, ExpressJS и Ldap JS. Я хочу создать страницу профиля пользователя, где пользователь сможет видеть свои атрибуты на сервере LDAP и может их изменять.
Если я введу действительный идентификатор пользователя в URL-адресе запроса, сервер успешно найдет пользователя и ответить на требуемые атрибуты этого пользователя, которые можно увидеть, например, через браузер и почтальона. Теперь моя проблема в том, что если данный «uid», соответственно, сам пользователь не существует на моем LDAP-сервере, сайт продолжает загружаться бесконечно и не выдает никаких ошибок или каких-либо ответов ...
Вот мой текущий код:
const express = require('express');
const router = express.Router();
const ldap = require('ldapjs');
const client = ldap.createClient({
url: 'ldap://ldap.example.de:389',
timeout: 30000,
reconnect: true
});
client.bind('cn=readonly,dc=example,dc=de', 'secret', function(err){
if(err) throw err;
});
router.get('/:username', function(req, res) {
let opts = {
scope: 'sub',
filter: `(uid=${req.params.username})`,
// attributes: ['givenName', 'sn', 'jpegPhoto', 'mail', 'uid']
attributes: ['givenName', 'sn', 'mail', 'uid'] //example attributes (not final)
}
client.search('ou=User,dc=example,dc=de', opts, function(err, result) {
if(err) throw err;
result.on('searchEntry', function(entry){
res.send(entry.object);
});
result.on('searchReference', function(referral) {
console.log('referral: ' + referral);
});
res.on('error', function(err) {
console.error('error: ' + err.message);
});
res.on('end', function(result) {
console.log('status: ' + result.status);
});
});
});
Я везде искал решение или возможную проблему, но ничего не смог найти. Итак, я должен спросить вас, ребята ^^ Я надеюсь, что вы можете помочь мне
Обновленный код с помощью Klaycon:
const express = require('express');
const router = express.Router();
const ldap = require('ldapjs');
const client = ldap.createClient({
url: 'ldap://ldap.example.de:389',
timeout: 30000,
reconnect: true
});
client.bind('cn=readonly,dc=example,dc=de', 'secret', function(err){
if(err) throw err;
});
router.get('/:username', function(req, res) {
let opts = {
scope: 'sub',
filter: `(uid=${req.params.username})`,
// attributes: ['givenName', 'sn', 'jpegPhoto', 'mail', 'uid']
attributes: ['givenName', 'sn', 'mail', 'uid'] //example attributes (not final)
}
client.search('ou=User,dc=example,dc=de', opts, function(err, result) {
if(err) throw err;
result.on('searchEntry', function(entry){
res.send(entry.object);
});
result.on('searchReference', function(referral) {
console.log('referral: ' + referral);
});
result.on('error', function(err) {
console.error('error: ' + err.message);
});
result.on('end', function(resu) {
console.log('status: ' + resu.status);
if(resu.status != 0) res.status(404).send("User not found");
});
});
});