LoginSignup
0
0

More than 5 years have passed since last update.

MySQLメモその2

Last updated at Posted at 2018-11-30

前回のお話
せっかくデータを作成したので、読み取り側も作成したいと思います。
今回はexpressで作成します。

expressの導入

とりあえず新規に作業用フォルダを作ります。
express-mysqlとしました。
npm initからexpressをインストールします。

$ npm init
~中略~
$ npm install express --save-dev

次に作業フォルダにindex.jsを作成し、動作確認します。

index.js
const express = require("express");
const app = express();

app.get("/", function(req, res) {
  res.send("Hello World!");
});

app.listen(3000, () => {
 console.log('Go to http://localhost:3000/ to view page');
});

node index.jsで実行し、localhost:3000にアクセスしてHello World!と表示されていれば成功です。

node.jsでMySQLを操作する

次に、JSでMySQLを操作できるよう、MySQL用のパッケージを用意します。
https://www.npmjs.com/package/mysql

$ npm install mysql --save-dev

これがあれば、JSファイルからMySQLサーバーにアクセスし、クエリの実行等々行うことができます。
便利です。

先ほどのindex.jsの3行目以下に、次のように記述を追加します。

index.js
const mysql = require("mysql");
const connection = mysql.createConnection({
  host: "localhost",
  user: "root",
  password: "password",
  database: "test"
});

host、user名等は適宜付け替えてください。
これで、connectionという変数で以降MySQLにアクセスできるようになります。

最後に、データを確認するため、簡易的に表示部分を追加します。
Hello World!を返していたapp.get関数部分を、以下の様に書き換えます。

index.js
app.get("/", function(req, res) {
  connection.query("select * from todos LIMIT 0, 10", error, results, fields) {
    if (error) throw error;
    res.send(results);
  });

    connection.end();
});

これで、localhost:3000にMySQLのデータが表示されていれば成功です。

MySQL8.0以降における注意

MySQL8.0からパスワードの認証方法が変更され、上に挙げたnpm標準パッケージでは未対応となっています(2018.11現在)。
そのため8.0以降のサーバーに上記の方法でそのままアクセスしようとすると、ER_NOT_SUPPORTED_AUTH_MODE:というエラーコードにより弾かれてしまいます。

解決策としては、こちらの方のパッケージを使用するか、
以下のやり方でMySQL側のユーザーパスワードをcaching_sha2_passwordからmysql_native_passwordに変更することが必要だそうです。

既存ユーザーの変更

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'MyNewPass';

もしくは、
新規ユーザーの作成

CREATE USER 'foo'@'localhost' IDENTIFIED WITH mysql_native_password BY 'bar';

下のやり方は若干力技な気がしますが、一応これで動作すると思われます。
(大人しく対応済みのパッケージを使用したほうが良いかも・・・)

※参考にしたのはこちら
https://stackoverflow.com/questions/50373427/node-js-cant-authenticate-to-mysql-8-0

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0