Open1
【要注意】node.jsでActive directoryライブラリによるAD検索結果をテキストとして利用出来ない
やりたいこと
PromiseオブジェクトをStringに変換して再利用したいのです。再利用の目的はHTMLやMarkDownのテキストの中に埋め込んで使うことです。
しかし、わたしは実力不足でこれができずに、貴重な時間を無駄にしてしまいました( ; ; )
困ったこと
PromiseオブジェクトをStringに変換出来ません。必ずConverting Object Promise to String in Javascript
エラーが発生します
Activedirectoryライブラリ利用
const ActiveDirectory = require( 'activedirectory' )
const AD = {
config : {
url : 'LDAP://hogehoge.ad.foo.baa.jp'
, baseDN : 'dc=ad,dc=foo,dc=baa,dc=jp'
, username : process.env.ADUSER
, password : process.env.ADPASSWORD
, secure : true
, timeLimit : 3000
, attributes : { user:[ 'sAMAccountName', 'displayName', 'department', 'mail' ] }
}
,
query : '(mail={{mailAddress}})'
}
function getDepartmentFromAD(mailAddress){
return new Promise((resolve,reject) => {
ad.find(AD.query.replace('{{mailAddress}}',mailAddress), (err, results) => {
if ((err) || (! results)) { console.log('ERROR : ' + JSON.stringify(err)); return }
resolve( results.users[0].department )
})
})
}
function getIdNameMarkdownFromDepartment(department){
return new Promise((resolve,reject) => {
resolve(department.replace(' ','|') + '|' + '|')
})
}
const createBelongsIdName = async function( kind, mailAddress, markdownList ) {
try {
if( kind == INFO.account.kind.employees ) {
getDepartmentFromAD(mailAddress).then(getIdNameMarkdownFromDepartment).then((idNameMarkdown)=>{
setTimeout(()=>{markdownList += idNameMarkdown},INFO.timeOut)
})
} else {
markdownList += '-|' + '-|'
}
} catch( err ) {
console.error( 'createBelongsIdName() : ' + err )
return null;
}
return markdownList
}
エラーの発生箇所
返されたPromiseオブジェクトをString型の変数markdownListに格納
markdownList += idNameMarkdown
エラーの内容
String型のmarkdownList
にPromiseオブジェクト型のidNameMarkdown
代入できないと言うエラーが出ます。色々試行錯誤しましたが、Promiseオブジェクト型をString型に型変換することはできないようです。
GitHubなどに公開されている多くのコードがconsole.log()
メソッドでPrpmiseオブジェクトが返した値をコンソールに表示するだけです。わたしがしたいのはPromiseオブジェクトをString型に型変換して再利用することです。
わたしの解決策(逃げ)
node.jsを使うのを諦めて、PythonのActivedirectoryライブラリを利用しました。上記のPromise問題は起こらず、すんなり解決しました。しかし、あくまでもこれは代替手段の逃げです。個人的にはかなりモヤモヤしています。
お願い
どなたか良い解決策をご存知ないでしょうか?