masalibの日記

システム開発、運用と猫の写真ブログです

Deno.landでmysqlに接続してデータを取得する

WEBアプリケーションと言ったら兎にも角にもmysqlでしょ!! という事でDeno.landでmysqlに接続してデータを取得したいと思います

前作業1

DBは前につくったvcwwのVMに接続します

ローカルからVMmysqlに接続するために vagrantfileに下記を追記しました

config.vm.network "forwarded_port", guest: 3306, host: 3306

これで127.0.0.1:3306に接続するとvmmysqlに接続します

前作業2

wordpressのテーブルだと分かりづらいので適当なテーブルを作りました。

CREATE TABLE `Product` (
  `id` varchar(64) NOT NULL,
  `name` varchar(256) DEFAULT NULL,
  `description` varchar(1024) DEFAULT NULL,
  `price` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

データがないとうまくいったのかわからないのでデータを用意

INSERT INTO `wordpress`.`Product` (`id`, `name`, `description`, `price`) VALUES ('1', 'Product1', 'description1', '100');
INSERT INTO `wordpress`.`Product` (`id`, `name`, `description`, `price`) VALUES ('2', 'Product2', 'description2', '200');
INSERT INTO `wordpress`.`Product` (`id`, `name`, `description`, `price`) VALUES ('3', 'Product3', 'description3', '300');

データ取得のプログラム

import { Client } from "https://deno.land/x/mysql/mod.ts";
const client = await new Client().connect({
  hostname: "127.0.0.1",
  username: "wordpress",
  db: "wordpress",
  password: "wordpress",
  port:3306
});
const data = await client.query(`SELECT id , name , description, price  FROM Product;`)
console.log(data)
await client.close()
  • パスワードの生で書いてありますがいずれは環境変数から取得したい
  • portは文字列だと怒られました。当たり前ですよね

結果

$ deno run --allow-net simpleServer3.ts

INFO connecting 127.0.0.1:3306
INFO connected to 127.0.0.1
[
  { id: "1", name: "Product1", description: "description1", price: 100 },
  { id: "2", name: "Product2", description: "description2", price: 200 },
  { id: "3", name: "Product3", description: "description3", price: 300 }
]
INFO close connection

infoは勝手に表示されるのかな・・・ちょっと消したい

参考URL

Deno で MariaDB のデータを読む (Read) - Qiita

deno_mysql | deno_mysql