###前提・実現したいこと
同じリクエストを何回行ってもMySQLから必要なデータを取得できるようにしたい。
(後の実装でブラウザからDBへ検索をかけたときに、データを取得してブラウザで表示できるようにしたいため)
###発生している問題・エラーメッセージ
MySQLからデータを取得するリクエスト(http://localhost:3001/api)を出した際、初回はデータを取得できるのですが2回目以降は下記エラーが発生してしまい取得できません。
Error: Can't add new command when connection is in closed state at Connection._addCommandClosedState (/mnt/c/temp/comic_20211026/node_modules/mysql2/lib/connection.js:148:17) at Connection.end (/mnt/c/temp/comic_20211026/node_modules/mysql2/lib/connection.js:855:26) at Query.onResult (/mnt/c/temp/comic_20211026/backend/index.js:38:20) at Connection._addCommandClosedState (/mnt/c/temp/comic_20211026/node_modules/mysql2/lib/connection.js:153:11) at Connection.query (/mnt/c/temp/comic_20211026/node_modules/mysql2/lib/connection.js:546:17) at /mnt/c/temp/comic_20211026/backend/index.js:34:14 at Layer.handle [as handle_request] (/mnt/c/temp/comic_20211026/node_modules/express/lib/router/layer.js:95:5) at next (/mnt/c/temp/comic_20211026/node_modules/express/lib/router/route.js:137:13) at Route.dispatch (/mnt/c/temp/comic_20211026/node_modules/express/lib/router/route.js:112:3) at Layer.handle [as handle_request] (/mnt/c/temp/comic_20211026/node_modules/express/lib/router/layer.js:95:5)
該当ソースは以下になります。
JavaScript
1const express = require('express') 2const mysql = require('mysql2') 3const app = express() 4const port = process.env.PORT || 3001 5 6app.get('/', (req, res) => { 7 res.send('Hello World!') 8}) 9 10console.log("connection定義開始"); 11const connection = mysql.createConnection({ 12 host: 'localhost', 13 user: 'testuser001', 14 password: 'Testuser001&', 15 database: 'comic' 16}); 17console.log("connection定義終了"); 18 19app.get("/api", (req, res) => { 20 connection.query( 21 'SELECT * FROM `list`', 22 function(err, results, fields) { 23 if(err) { 24 connection.end(); 25 console.log("接続終了(異常)"); 26 throw err; 27 } 28 res.json({message: results[0].title}); 29 } 30 ) 31 connection.end(); 32 console.log("接続終了(正常)"); 33}); 34 35app.listen(port, () => { 36 console.log(`listening on *:${port}`); 37})
###試したこと
最後に「connection.end()」とやっていることが原因で2回目以降のリクエストに失敗していると考え、connection.query()を実行する前にconnectメソッドを呼び出すようにしてみました。
JavaScript
1connection.connect((err) => { 2 if (err) { 3 throw new err("接続失敗"); 4 } 5 console.log("接続成功"); 6})
しかし、その方法を取り入れても同様のエラーが出てしまいます。。。
###考えられること
初回はデータが取れて2回目以降が取れなくなっているということで、おそらくMySQL関連の実装に
問題がありそうというところまでは想像できます。ただ、対処法が思いつかずこちらに質問を出している次第です。
###補足情報(FW/ツールのバージョンなど)
Node.js:14.16.1
npm:6.14.12
mysql2:2.3.3
express:4.17.1
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。