Open1

【要注意】node.jsでActive directoryライブラリによるAD検索結果をテキストとして利用出来ない

Teru roomTeru room

やりたいこと

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問題は起こらず、すんなり解決しました。しかし、あくまでもこれは代替手段の逃げです。個人的にはかなりモヤモヤしています。

お願い

どなたか良い解決策をご存知ないでしょうか?