0
私は、Active Directoryと対話するための2つの関数を持つ単純なモジュールを用意しています。標準のコールバックスタイルを使用してNode.js:モジュール関数をコールバックからBluebirdの約束に変換する
、コードがうまく動作します:
/**
* mylib.js
**/
const ActiveDirectory = require('activedirectory');
// Instantiate AD client
const ad = new ActiveDirectory({
url: 'ldaps://...',
baseDN: 'DC=...',
});
module.exports = {
// Authenticate user against the AD
authenticate: (username, password, callback) => {
// Authentication request
ad.authenticate(username, password, (err, status) => {
callback(err, status);
});
},
};
/**
* client.js
**/
const mylib = require('./mylib');
mylib.authenticate('<username>', '<password>', (err, status) => {
if (err) {
console.log(`Error: ${err}`);
return;
}
console.log(`Success: ${status}`);
});
実行結果:
> node client.js
Success: true
次のステップではなく、コールバックの約束を使用するために私のlibメソッドをリファクタリングすることでした。
/**
* mylib.js
**/
const ActiveDirectory = require('activedirectory');
const Promise = require('bluebird');
//...
module.exports = {
// Authenticate user against AD
authenticate: Promise.method((username, password) => {
ad.authenticate(username, password, (err, status) => {
if (err) throw err;
return status;
});
}),
};
/**
* client.js
**/
const mylib = require('./mylib');
myLib.authenticate('<username>', '<password>').then((status) => {
console.log(`Success: ${status}`);
}).catch((err) => {
console.log(`Error: ${err}`);
});
実行結果:
> node client.js
Success: undefined
したがって、status
が解決されていないようです。
私は何か他のもの(接続エラーを強制し、拒絶反応を見るために)にADサーバのURLを変更した場合、私は解決し、拒絶ログの両方を参照することができます
> node client.js
Success: undefined
/Users/.../mylib.js:84
if (err) throw err;
^
Error: connect ECONNREFUSED <IP>
at Object.exports._errnoException (util.js:1036:11)
at exports._exceptionWithHostPort (util.js:1059:20)
at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1080:14)
は私が間違って何をしているのですか?それを理解できません。
ad.authenticate(...)の結果を返すようにしてください。 'return ad.authenticate()' これで解決しない場合は、このメソッドを別の約束事でラップして返します。 [docs](http://bluebirdjs.com/docs/api/promise.method.html)をチェックすると、非同期を実行するときに約束を返します。 – bpinhosilva