質問: result.rows; doRelease(connection); console.log(kekka); }); }); function doRelease(connection) { connection.close( function(err) { if (err) { console.error(err.message); } }); } ``` しかし、表示した結果を外部から参照するのに試行錯誤するのですがうまくいきません。変数を用意してexports.をつけるのが良いのか、なんらかの関数を外部から利用できるようにするのがよいのかわかりません。何が問題でどうすれば良いでしょうか。
回答: node.jsは全般的に非同期処理への理解が必要です。 特にDB操作では必須です。 その理解なしに開発を進めると、質問者さんがいま経験されている通り、 コールバック地獄なコードとなり、ネスト地獄・謎の大量のグローバル変数・・・ メンテ不可能なプログラムが産まれてしまいます。 まずはPromiseとAsync/Awaitを習得される事をお勧めします。 さいわいnode-oracleはPromise化されているので、 callbackスタイルでgetConnectionやexecuteを書く必要はなく、 以下のようなコーディングが可能です。 Promise(`then()`で処理を繋げていく) Async/Await(`let result = await conn.execute(SELECT)`同期処理っぽく書ける) とにかくPromiseに慣れるのが近道です。 追記:他のjsとの連携方法ですが、execute部分をPromise化した関数なんかをexportすれば他のjsからthenやawaitで取得できるので、 同期処理っぽく上から順番にコーディングを書いていく事ができますよ。