質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

7500閲覧

Node.jsでoracleを読み取り、結果を外部のjavascriptファイルから利用したい

immmmmmmm

総合スコア13

Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2018/01/30 05:59

編集2018/01/30 06:34

Node.js初心者です。
windows環境でNode.jsを使ってoracleを読み取り、外部のjavascriptファイルから利用したいのですが、詰まってしまいました。
nmpでnode-oracledbをインストールして、githubのサンプルを流用した以下のようなコードで結果を読み取るまでは成功しました。

javascript

1// https://github.com/oracle/node-oracledb/blob/master/examples/select1.js#L35 2 3var oracledb = require('oracledb'); 4 5oracledb.getConnection( { 6 user : "user", 7 password : "password", 8 connectString : "connectString" 9 }, 10 function(err, connection) { 11 if (err) { 12 console.error(err.message); 13 return; 14 } 15 connection.execute( 16 `SELECT department_id, department_name 17 FROM departments WHERE department_id = :id`, 18 [180], 19 { 20 maxRows: 1 21 }, 22 23 function(err, result) { 24 if (err) { 25 console.error(err.message); 26 doRelease(connection); 27 return; 28 } 29 // 成功時 30 const kekka = result.rows; 31 doRelease(connection); 32 console.log(kekka); 33 }); 34}); 35 36function doRelease(connection) { 37 connection.close( 38 function(err) { 39 if (err) { 40 console.error(err.message); 41 } 42 }); 43} 44

しかし、表示した結果を外部から参照するのに試行錯誤するのですがうまくいきません。変数を用意してexports.をつけるのが良いのか、なんらかの関数を外部から利用できるようにするのがよいのかわかりません。何が問題でどうすれば良いでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

node.jsは全般的に非同期処理への理解が必要です。
特にDB操作では必須です。
その理解なしに開発を進めると、質問者さんがいま経験されている通り、
コールバック地獄なコードとなり、ネスト地獄・謎の大量のグローバル変数・・・
メンテ不可能なプログラムが産まれてしまいます。
まずはPromiseとAsync/Awaitを習得される事をお勧めします。

さいわいnode-oracleはPromise化されているので、
callbackスタイルでgetConnectionやexecuteを書く必要はなく、
以下のようなコーディングが可能です。

Promise(then()で処理を繋げていく)
https://github.com/oracle/node-oracledb/blob/master/doc/api.md#promiseoverview

Async/Await(let result = await conn.execute(SELECT)同期処理っぽく書ける)
https://github.com/oracle/node-oracledb/blob/master/doc/api.md#asyncawaitoverview

とにかくPromiseに慣れるのが近道です。

追記:他のjsとの連携方法ですが、execute部分をPromise化した関数なんかをexportすれば他のjsからthenやawaitで取得できるので、
同期処理っぽく上から順番にコーディングを書いていく事ができますよ。

投稿2018/01/30 07:09

編集2018/01/30 07:27
so87

総合スコア764

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

immmmmmmm

2018/01/30 07:50

ありがとうございます。いろいろ勉強必要そうですね。。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問