LoginSignup
0
0

More than 1 year has passed since last update.

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

Last updated at Posted at 2021-05-09

やりたいこと

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

お願い

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

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0