🥏

fastifyをmysqlに接続する

2023/07/09に公開

TypeScriptだと対応していない?

TypeScriptを使用して、サンプル作成を使用としたのですが、パッケージが対応していないのかできなかったです。
今回は、JavaScriptに対応したものを作りました。

📺こちらの動画を参考にした

https://www.youtube.com/watch?v=GFb1PADRaM4

📗公式ドキュメントのコードを参考に作成した

https://fastify.dev/docs/latest/Guides/Database/

fastifyのプロジェクトを作成後に、パッケージを追加する

npm i @fastify/mysql

データベースにテーブルを作成する

MySQLのデータベースに、usersテーブルを作成する。私は、MyDataというデータベースの中に、usersテーブルを作成しました。

-- データベースの切り替え
use MyData;

--userテーブルを作成、id, name, age, emailを定義する
CREATE TABLE users (
    id MEDIUMINT NOT NULL AUTO_INCREMENT,
    name VARCHAR(255),
    age INT,
    email VARCHAR(255),
    PRIMARY KEY (id)
);

INSERT INTO users (name, age, email) VALUES ('John', 25, 'John@gmail.com');

SELECT * FROM users;

📡データベースに接続するコード

接続が正しくできていればブラウザに、MySQLのデータがJSON形式で表示されます。

const fastify = require('fastify')()

fastify.register(require('@fastify/mysql'), {
// connectionStringで、接続先のDBを指定する。パスワード、ユーザー名、ポート番号、DB名を指定する。
  connectionString: 'mysql://root:1234@localhost:3306/MyData'
})

fastify.get('/user/:id', function(req, reply) {
  fastify.mysql.query(
    'SELECT id, name, age, email FROM users WHERE id=?', [req.params.id],
    function onResult (err, result) {
      reply.send(err || result)
    }
  )
})

fastify.listen(3000, (err) => {
  if (err) throw err
  console.log(`Server is listening on port 3000`)
})

ローカルサーバーを起動して、エンドポイントにアクセスする

node server

http://localhost:3000/user/1

curlコマンドを実行すると、エンドポイントから、userテーブルのデータを取得できます。

hashimotojunichi@hashimotojunichinoMacBook-Pro fastify-mysql % curl http://localhost:3000/user/1
[{"id":1,"name":"John","age":25,"email":"John@gmail.com"}]%   

まとめ

データの追加もして表示するのをやってみましたが、user/1と指定して、idを指定しないと、データの取得はできませんでした。次は、もっといい感じのコードを書けるように頑張ります。

Discussion