🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

JavaScript

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

Q&A

解決済

2回答

2029閲覧

node.jsを使用してSQL Serverから値を取得する。

kansai5963

総合スコア23

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

JavaScript

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

0グッド

0クリップ

投稿2020/11/25 07:38

編集2020/11/30 00:23

前提・実現したいこと

node.jsを使用してSQL Serverから値を取得する。
初期画面にてIDとパスワードを入力するとDBに接続し、
パスワードが正しいかを確認し、正しい場合は「homepage」に接続する。
パスワードが誤りの場合は、「パスワードが不正です」と表示させる。

発生している問題・エラーメッセージ

Requests can only be made in the LoggedIn state, not the Initialized state

該当のソースコード

javascript

1 // SQL処理 2 var connection = new tedious.Connection(config); 3 var content = []; // DBからselectした結果を格納する変数 4 5 connection.on('connect', function(err1) { 6 if (err1) { 7 console.log("-> error (" + err1 + ")"); 8 } else { 9 10 //var TYPES = require('tedious').TYPES; 11 var Request = require('tedious').Request; 12 var sql="select count(*) as id from t_table1 where id='" + xx + "'"; 13 console.log('->sql' + sql); 14 var request = new Request(sql, function(err2) { 15 if (err2) { 16 console.log("-> err2 (" + err2 + ")"); 17 // 接続を解除 18 connection.close(); 19 20 var data = { 21 content: 'IDまたはパスワードが異なっています。正しく入力して下さい。3', 22 disabled : "", 23 color : "red" 24 }; 25 res.render('login',data); 26 } else { 27 console.log("-> requestCompleted"); 28 // 接続を解除 29 connection.close(); 30 } 31 }); 32 var result = {}; 33 34 // 出力取り出し 35 request.on('row', function(columns) { 36 columns.forEach(function(column) { 37 if (column.value === null) { 38 console.log('NULL'); 39 } else { 40 result[column.metadata.colName] = column.value; 41 } 42 }); 43 content.push(result); 44 result = {}; 45 }); 46 47 // DB接続を終了した際のイベントハンドラ 48 // DB接続を切断した後に画面を描写する 49 connection.on('end', function () { 50 content.forEach(function(value) { 51 console.log('->id='+value.id); 52 }); 53 console.log("disconnected"); 54 55 if (content[0].id > 0) { 56 57 connection.on('connect', function(err3) { 58 if (err3) { 59 console.log("-> error (" + err3 + ")"); 60 } else { 61 62 console.log('->error_null'); 63 64 // SQL処理 65 var connection = new tedious.Connection(config); 66 var content2 = []; // DBからselectした結果を格納する変数 67 68 var Request = require('tedious').Request; 69 70 var sql2="select password from t_table1 where id='"+xx+"'"; 71 console.log('->sql2' + sql2); 72 73 var request2 = new Request(sql2, function(err4) { 74 if (err4) { 75 console.log("-> err4 (" + err4 + ")"); 76 // 接続を解除 77 connection.close(); 78 79 var data = { 80 content: 'IDが異なっています。正しく入力して下さい。1', 81 disabled : "", 82 color : "red" 83 }; 84 res.render('login',data); 85 } else { 86 console.log("-> request2Completed"); 87 // 接続を解除 88 connection.close(); 89 } 90 }); 91 var result2 = {}; 92 93 // 出力取り出し 94 request2.on('row', function(columns2) { 95 columns2.forEach(function(column2) { 96 if (column2.value === null) { 97 console.log('NULL'); 98 } else { 99 result2[column.metadata.colName] = column2.value; 100 } 101 }); 102 content2.push(result2); 103 result2 = {}; 104 }); 105 106 // DB接続を終了した際のイベントハンドラ 107 // DB接続を切断した後に画面を描写する 108 connection.on('end', function () { 109 content2.forEach(function(value) { 110 console.log('connection_end2'); 111 }); 112 console.log("disconnected"); 113 var dbpw = content2[0].password; 114 115 console.log('->dbpw'+ dbpw); 116 117 if (pw == dbpw) { 118 119 //入力内容とDBのデータが一致した場合 120 res.redirect('/homepage'); 121 122 } else { 123 var data = { 124 //パスワード入力ミス 125 content: 'パスワードが不正です。', 126 disabled : '', 127 color : "red" 128 }; 129 res.render('login',data); 130 } 131 132 }); 133 134 //SQL実行 135 connection.execSql(request2); 136 137 } 138 }); 139 140 } else { 141 var data = { 142 //該当IDが見つからない場合 143 content: 'idが不正です。', 144 disabled : "", 145 color : "red" 146 }; 147 res.render('login',data); 148 connection.end(); 149 } 150 }); 151 152 //SQL実行 153 connection.execSql(request); 154 155 156 } 157 }); 158

試したこと

構文に誤りがないかチェックはしました。

補足情報(FW/ツールのバージョンなど)

VisualStudioCodeを使用し、IE11で表示させてます。

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

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

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

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

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

guest

回答2

0

自己解決

asyncを使用することにより解決しました。

投稿2020/11/30 03:31

kansai5963

総合スコア23

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

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

0

接続が確立する前にリクエストを投げているようです。

接続完了(または失敗)のタイミングは、onメソッドで検出出来ます。

JavaScript

1connection.on("connect",err=> 2{ 3 //errがnullであれば接続完了 4})

投稿2020/11/27 09:10

AT_2nd

総合スコア266

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

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

kansai5963

2020/11/29 23:53

ご回答ありがとうございます。 ご指摘いただきましたconnection.onをつけさせていただきましたが、homepageに遷移する前にだんまりとなってしまいます。 なお、本質問では省略しておりますが、この前の部分にもう一個select文があり、その中の connection.on('end', function () { content.forEach(function(value) { console.log('->name='+value.name); }); console.log("disconnected"); の下に該当する部分を入れております。 初歩的な質問かもしれませんが間違えておりましたら大変申し訳ございません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問