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

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

新規登録して質問してみよう
ただいま回答率
85.35%
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回答

3802閲覧

"Cannot enqueue Query after fatal error." が稀に現れる

takoyaki_

総合スコア0

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クリップ

投稿2021/09/22 16:13

node.jsとmysqlの接続で "Cannot enqueue Query after fatal error." が稀に現れる。

mysqlにあるusersテーブルの中からusernameを持ってきた時、それをresultsに入れてるはずが、時々undefinedになってしまいます。1番の謎がこれが毎回ではなく、たまに(体感2割くらい)undefinedになってしまい困っています。
また、herokuでデプロイを行っているのですが、localhost上で動かすと1度たりともエラーが出ないのに、デプロイすると時々このエラーが出てきます。

そこでその直前にconsole.log(errors);でエラーの文面を見たところ"Cannot enqueue Query after fatal error."と書かれていましたが、解消方法がわかりません。

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

2021-09-22T15:59:13.958501+00:00 app[web.1]: エラー原因 -> Error: Cannot enqueue Query after fatal error. 2021-09-22T15:59:13.959090+00:00 app[web.1]: /app/app.js:318 2021-09-22T15:59:13.959090+00:00 app[web.1]: if (results.length > 0) { 2021-09-22T15:59:13.959090+00:00 app[web.1]: ^ 2021-09-22T15:59:13.959091+00:00 app[web.1]: 2021-09-22T15:59:13.959091+00:00 app[web.1]: TypeError: Cannot read property 'length' of undefined 2021-09-22T15:59:13.959092+00:00 app[web.1]: at Query.<anonymous> (/app/app.js:318:19) 2021-09-22T15:59:13.959092+00:00 app[web.1]: at Query.<anonymous> (/app/node_modules/mysql/lib/Connection.js:526:10) 2021-09-22T15:59:13.959092+00:00 app[web.1]: at Query._callback (/app/node_modules/mysql/lib/Connection.js:488:16) 2021-09-22T15:59:13.959093+00:00 app[web.1]: at Query.Sequence.end (/app/node_modules/mysql/lib/protocol/sequences/Sequence.js:83:24) 2021-09-22T15:59:13.959093+00:00 app[web.1]: at /app/node_modules/mysql/lib/protocol/Protocol.js:236:14 2021-09-22T15:59:13.959093+00:00 app[web.1]: at processTicksAndRejections (internal/process/task_queues.js:77:11) 2021-09-22T15:59:13.963140+00:00 heroku[router]: at=error code=H13 desc="Connection closed without response"

該当のソースコード

js

1... 2... 3... 4 connection.query( 5 'SELECT * FROM users WHERE username = ?', 6 [username], 7 (error, results) => { 8 console.log("エラー原因 -> " + error); 9 if (results.length > 0) { //ここがエラーの出ている318行目です 10 const plain = req.body.password; 11 const hash = results[0].password; 12 bcrypt.compare(plain, hash, (error, isEqual) => { 13 if (isEqual) { 14 req.session.userId = results[0].id; 15 req.session.username = results[0].username; 16 res.redirect('/index'); 17 } else { 18 const errors = []; 19 errors.push('パスワードが間違っています。') 20 res.render('login.ejs', {errors: errors}); 21 } 22 }); 23 } else { 24 const errors = []; 25 errors.push('ユーザー名が登録されていません。') 26 res.render('login.ejs', {errors: errors}); 27 } 28 } 29 ); 30... 31... 32...

試したこと

https://teratail.com/questions/47770
こちらのサイトのことが原因かと思って直してみたのですが、変わりませんでした。

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

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

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

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

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

guest

回答1

0

自己解決

pool.getConnectionを最初に入れたら解決しました。
解決したのでほっとしていますが、何故かわからずモヤモヤもあります。

投稿2021/09/26 11:26

takoyaki_

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問