У меня есть метод в классе, который делает запрос ActiveDirectory.Поэтому я использую пакет 'activedirectory2' npm.Я успешно прошел проверку подлинности и успешно зарегистрировал свой результат в консоли.
Теперь, когда я создал экземпляр своего класса и попытался вызвать метод, я не смог получить непустой результат.
Я попробовал это с getters / setters, чтобы сделать значение _result доступным после усиления класса.Я попытался решить свою проблему с помощью исследования асинхронных вызовов, но, очевидно, не смог задать правильный вопрос.
class Activedirectory
var ActiveDirectory = require("activedirectory2");
class AuthenticateWithLDAP {
constructor(user, password){
this._result = [];
this.user = user;
this.password = password;
this.config = {
url: "ldaps://someldap",
baseDN: "somebasdn",
username: this.user,
password: this.password,
filter: 'somefilter',
}
this.ad = new ActiveDirectory(this.config);
}
//Auth Method
auth() {
var result = this._result;
this.config.entryParser = function(entry,raw,callback){
if(entry.hasOwnProperty('info')) {
result.push(entry.info);
this._result = result;
}
callback(entry);
}
this.ad.authenticate(config.username, config.password, (err,auth)=>{
if (err) {
//some error handling
}
if (auth) {
this.ad.find(config,async (err, userDetails) => {
var result = this._result;
{
if (err) {
//some error handling
}
if(!userDetails) {
console.log("No users found.");
} else {
this._result = result[0]; //I want this result!
console.log('result: ', this._result);
return await this._result;
}
}
})
} else {
console.log("Authentication failed!");
}
});
}
//getter/setter
get result(){
return this._result;
}
set result(value) {
this._result.push(value);
}
}
module.exports = AuthenticateWithLDAP;
модуль маршрута
const express = require('express');
const AuthwithLDAP = require('AuthenticateWithLDAP');
const router = express.Router();
router.post('/', async (req,res,next) => {
let x = async ()=> {
authwithldap = new AuthwithLDAP(req.body.user,req.body.password);
return await authwithldap.auth();
}
x().then((res)=>{
console.log('res: ', res); //always []
})
})
Я ожидал, что смогу использовать значение _result класса AuthenticateWithLDAP в моем обработчике метода router.post.На самом деле я получаю только [] (пустой массив) в router.post.
Не могли бы вы рассказать мне, как изменить значение _result таким образом, чтобы экземпляр класса знал его и мог использовать его снаружи?Сам класс.
Большое спасибо.
Миха