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

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

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

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Node.js

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

JavaScript

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

Q&A

解決済

1回答

9725閲覧

Node.jsでMySQLに接続し、データをブラウザ上で表示したい

kamekawashinta

総合スコア39

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Node.js

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

JavaScript

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

0グッド

0クリップ

投稿2016/05/16 07:44

###前提・実現したいこと
プログラミング初心者です。
Node.js、Expressを使い、http://localhost:3000/にアクセスするとMySQL上のデータを表示できるようにしたいと考えています。
また、コマンドライン上でも同じように表示させていと考えています。(こちらは動作しているようです)
現在、http://localhost:3000/にアクセスすると以下の様なエラーが記載され、ブラウザ上では接続不可の表示がなされます。
どのようなアプローチをなすべきでしょうか?ご教示いただきたく存じます。

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

C:\sqlnode>node app results [ RowDataPacket { country: 'japan', capital: 'tokyo' }, RowDataPacket { country: 'usa', capital: 'washington' }, RowDataPacket { country: 'ネーデルランド', capital: 'アムステルダム' } ] conection end events.js:141 throw er; // Unhandled 'error' event ^ Error: Cannot enqueue Handshake after invoking quit. at Protocol._validateEnqueue (C:\sqlnode\node_modules\mysql\lib\protocol\Protocol.js:202:16) at Protocol._enqueue (C:\sqlnode\node_modules\mysql\lib\protocol\Protocol.js:135:13) at Protocol.handshake (C:\sqlnode\node_modules\mysql\lib\protocol\Protocol.js:52:41) at Connection.connect (C:\sqlnode\node_modules\mysql\lib\Connection.js:123:18) at C:\sqlnode\app.js:20:16 at Layer.handle [as handle_request] (C:\sqlnode\node_modules\express\lib\router\layer.js:95:5) at next (C:\sqlnode\node_modules\express\lib\router\route.js:131:13) at Route.dispatch (C:\sqlnode\node_modules\express\lib\router\route.js:112:3) at Layer.handle [as handle_request] (C:\sqlnode\node_modules\express\lib\router\layer.js:95:5) at C:\sqlnode\node_modules\express\lib\router\index.js:277:22 C:\sqlnode>

###該当のソースコード

javaScript

1var express = require('express'); 2var app = express(); 3 4var mysql = require('mysql'); 5var connection = mysql.createConnection({ 6 host: 'localhost', 7 database: 'auth', 8 user: 'root', 9 password: '1374taiki', 10 port: 3306 11 12 13 }); 14 15var data = []; 16 17app.get('/',function(req,res){ 18 var sql = 'select * auth.city;'; 19 connection.connect(); 20 var query = connection.query(sql); 21 query.on('result',function(rows){ 22 data.push(rows); 23 } ) 24 .on('end',function(){ 25 res.writeHead(200,{ 26 'Content-Type':'application/json', 27 'charset':'utf-8' 28 }); 29 res.write(JSON.stringify(data),encoding='utf8'); 30 res.end(); 31 connection.destroy(); 32 }) 33}) 34app.listen(3000); 35 36 37connection.connect(function(err){ 38if(err){ 39 console.error(err); 40} 41}); 42connection.query('select * from city;', function(err, results) { 43 if(err){ 44 console.log(err); 45 } 46 console.log("results") 47 console.log(results); 48 49 50}); 51 52 53connection.end(function () { 54 console.log('conection end'); 55}); 56

###補足情報(言語/FW/ツール等のバージョンなど)
Express使用

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

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

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

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

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

guest

回答1

0

ベストアンサー

クエリを投げるたびにconnect disconnectする必要はありません。
node-mysql の イントロダクションのようにしてみてください。
https://github.com/felixge/node-mysql#introduction

javascript

12var connection = mysql.createConnection({ 3 host: 'localhost', 4 database: 'auth', 5 user: 'root', 6 password: '1374taiki', 7 port: 3306 8 9 10 }); 11connection.connect(); 1213

このエラーに対する説明を書いている方がいますが、こちらも参考までに。
http://codetheory.in/fixing-node-mysql-error-cannot-enqueue-handshake-after-invoking-quit/

Note: If you’re serving web requests, then you shouldn’t be ending connections on every request. Just create a connection on server startup and use the connection/client object to query all the time. You can listen on the error event to handle server disconnection and for reconnecting purposes.

投稿2016/05/16 10:44

bleurouge

総合スコア161

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

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

kamekawashinta

2016/05/17 00:27

なるほど……! ありがとうございます。解決いたしました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問