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

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

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

解決済

2回答

789閲覧

Node.jsにてDB出力ができない

yuki30

総合スコア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クリップ

投稿2020/09/15 05:09

編集2020/09/16 16:19

前提・実現したいこと

Progateにてプログラミングを勉強中なのですが
Node.jsとMySQLを接続をしたいのですがうまくいきません

MySQLにてDBとテーブルを作成、コマンドにてテーブルの確認済み
接続ができるかテストの為、サイトアクセス時にDB内容を出力

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

ローカルサーバーのテストページは表示されますが
データベースのテーブルデータがアクセス時の出力がされません

エラーメッセージ

C:\Users\User\test>node app.js

error connecting: Error: ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol requested by server; consider upgrading MySQL client
at Handshake.Sequence._packetToError (C:\Users\User\test\node_modules\mysql\lib\protocol\sequences\Sequence.js:47:14)
at Handshake.ErrorPacket (C:\Users\User\test\node_modules\mysql\lib\protocol\sequences\Handshake.js:123:18)
at Protocol._parsePacket (C:\Users\User\test\node_modules\mysql\lib\protocol\Protocol.js:291:23)
at Parser._parsePacket (C:\Users\User\test\node_modules\mysql\lib\protocol\Parser.js:433:10)
at Parser.write (C:\Users\User\test\node_modules\mysql\lib\protocol\Parser.js:43:10)
at Protocol.write (C:\Users\User\test\node_modules\mysql\lib\protocol\Protocol.js:38:16)
at Socket.<anonymous> (C:\Users\User\test\node_modules\mysql\lib\Connection.js:88:28)
at Socket.<anonymous> (C:\Users\User\test\node_modules\mysql\lib\Connection.js:526:10)
at Socket.emit (events.js:315:20)
at addChunk (_stream_readable.js:295:12)
--------------------
at Protocol._enqueue (C:\Users\User\test\node_modules\mysql\lib\protocol\Protocol.js:144:48)
at Protocol.handshake (C:\Users\User\test\node_modules\mysql\lib\protocol\Protocol.js:51:23)
at Connection.connect (C:\Users\User\test\node_modules\mysql\lib\Connection.js:116:18)
at Object.<anonymous> (C:\Users\User\test\app.js:13:12)
at Module._compile (internal/modules/cjs/loader.js:1137:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1157:10)
at Module.load (internal/modules/cjs/loader.js:985:32)
at Function.Module._load (internal/modules/cjs/loader.js:878:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:71:12)
at internal/main/run_main_module.js:17:47

app.js内コード

const

1const mysql = require('mysql2'); 2 3const app = express(); 4 5const connection = mysql.createConnection({ 6 host: 'localhost', 7 user: 'root', 8 password: '****', 9 database: 'list_app' 10}); 11 12connection.connect((err) => { 13 if (err) { 14 console.log('error connecting: ' + err.stack); 15 return; 16 } 17 console.log('success'); 18}); 19 20app.get('/', (req, res) => { 21 connection.query( 22 'SELECT * FROM users', 23 (error, results) => { 24 console.log(results); 25 res.render('index.ejs'); 26 } 27 ); 28}); 29 30app.listen(3001); 31

使用データベースとテーブル

mysql> show databases;

+--------------------+
| Database |
+--------------------+
| information_schema |
| list_app |
| mysql |
| performance_schema |
| sakila |
| sys |
| world |
+--------------------+
mysql> show tables;
+--------------------+
| Tables_in_list_app |
+--------------------+
| items |
| users |
+--------------------+

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

各種バージョン

mysql --version

mysql Ver 8.0.21 for Win64 on x86_64 (MySQL Community Server - GPL)

node -v

v12.18.3

npm -v

6.14.8

パッケージは下記インストール済みは確認
express mysql ejs
MySQLのサービスは開始状態

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

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

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

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

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

yuki30

2020/09/15 05:19

失礼しました。コード修正しました。
Orlofsky

2020/09/15 06:22

ちなみに、 某サイト って隠すような質問を掲示板でするのはどんなものでしょう?
yuki30

2020/09/15 06:56

確かに!言われてみれば 訂正しておきます
technocore

2020/09/15 12:34

エラーメッセージ コマンドプロンプト内にてundefined ↑ 日本語でこんなエラーメッセージが出るのでしょうか?
yuki30

2020/09/15 15:26

いえ、undefinedのみ…だと思っていたのですが 試したことに記載した内容と同じエラーコードが出てました そのエラー内容の後にundefinedが出力されてました 色々調べてみて、Mysqlの認証プラグインを昔の方法に変更すればいいという内容を見つけて 試行錯誤でやってみてる最中ではありますが、まだエラーは出る状態です
technocore

2020/09/15 15:47

エラーメッセージのどこにもundefinedという単語はありませんが。
yuki30

2020/09/15 15:59

すみません、それは私の記載漏れです…。 ただもう一度最初と同じコードを構成してもundefinedは出てこなくなり記載のエラーが出る状態です。 progateにはMysqlのバージョンを5.7.28でダウンロードとしており、最新のバージョンだからと8.0.21をダウンロードしたのが原因なのか、そこくらいしか違う所が見つけられません…。
technocore

2020/09/16 00:46 編集

(コメント修正) >そこくらいしか違う所が見つけられません…。 過去に8.0.21以外のバージョンをインストールした実績はありますか? また、8.0.21であれば、npmのパッケージは、mysql2を使ってみたらどうなるでしょうか?
yuki30

2020/09/16 12:45

過去に5.7.28をインストールしました。しかしなぜかインストールがうまくいかず、他で調べて8.0.21をインストールしてあります。 初心者で申し訳ないのですが、myspl2は基本的に使用方法は一緒になるのですか?調べてみるとmysql/promiseやら他のワードがヒットして中々見つけられず…
technocore

2020/09/16 12:51

8.0.21をインストールする前に、5.7.28はどうしましたか?
yuki30

2020/09/16 12:58

アンインストールをしました。方法はPC上のコントロールパネルから関連していたものを全てです。 一応、PC再起動をした後8.0.21をインストールしました。
technocore

2020/09/16 13:55

5系をアンインストールする時は、完全に削除してみてください。 mysql5本体のディレクトリ、DBのディレクトリ、mysqlの設定ファイルなど全てです。 ちなみに私のWindows環境で、あなたのapp.jsは動きますよ。 (rootのパスワード、データベース名やテーブル名は違いますが) D:> node -v v12.16.2 D:> mysql -v mysql Ver 8.0.20 for Win64 on x86_64 (MySQL Community Server - GPL) package.jsonのnpm一覧 "ejs": "^3.1.5", "express": "^4.17.1", "mysql2": "^2.1.0"
yuki30

2020/09/16 16:21 編集

mysql2をインストールしてみました。 結果、認証エラーは出なくなりました!! データベースの出力も問題なしです ただしかし、const mysql = require('mysql2'); の引数をmysqlにすると認証エラーはでますね… 長いですが以下エラー内容がやっと出ました。 長くなるので質問内容の整理と共にエラーメッセージもそちらに記載しました。 ごちゃごちゃにしてしまい申し訳ないです。
guest

回答2

0

自己解決

認証方法がどうしてもうまくいかず提案があったmysql2をインストール
以下のようにコードを書き換え

const mysql = require('mysql2');

これで接続が問題なくできました。
様々なご提案とご教授ありがとうございます。

投稿2020/09/17 04:19

yuki30

総合スコア0

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

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

0

nodejsがmysql ver8の認証方式に対応していないようです
https://stackoverflow.com/questions/50373427/node-js-cant-authenticate-to-mysql-8-0

投稿2020/09/16 10:04

komasan1

総合スコア257

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

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

technocore

2020/09/16 10:32

私のNodejsはMySQL8と連携していますが。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問