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
こちらのサイトのことが原因かと思って直してみたのですが、変わりませんでした。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。