masalibの日記

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

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

node.jsではよくMongoDBのデータをとるサンプルをよく見たのでDenoでもMongoDBに接続して表示したいと思います

DBについて

ローカルに作ってもよかったのですがすごい前にMongoDBのWEBサービスを使った事があり、まだそちらが生きていたのでそちらを使う事にしました。テストで使うなら無料なのでオススメです。

登録画面が古い可能性がありますが、登録方法の記事です。

masalib.hatenablog.com

接続URIは以下のようになっています。

mongodb://<dbuser>:<dbpassword>@<host>:<port>/<db>
mongodb://<dbuser>:<dbpassword>@ds247569.mlab.com:xxxxx/tamagoya

データの内容については以前にいれていたデータを使います。ちゃんとしたデータは今後でいれます

前作業

参考にしたページが.envファイルを読んで環境変数を設定していたのでそちらにあわせます。

.env

# .env
mongo_host=ds247569.mlab.com
mongo_user=XXXXXuser
mongo_password=password
mongo_db=tamagoya
mongo_collection=users 
mongo_port=NNNNN

データ取得のプログラム

controllers/testsimpleServer.ts

import { config } from "https://deno.land/x/dotenv/mod.ts";
import { MongoClient } from "https://deno.land/x/mongo@v0.7.0/mod.ts";

const ENV_PATH = '../.env';
const config_env:any = config({ path: ENV_PATH });
const user:string = config_env.mongo_user
const password:string = config_env.mongo_password
const host:string = config_env.mongo_host
const port:number = config_env.mongo_port
const db_name:string = config_env.mongo_db

//mongodb://<dbuser>:<dbpassword>@<host>:<port>/<db>
const url:string = 'mongodb://' + user + ':' + password + '@' + host + ':' + port + '/' + db_name
console.log("Connecting to " + host + ":" + port)

//mongoDB接続
const client = new MongoClient()
client.connectWithUri(url)

//DBの設定
const db = client.database(db_name)

//コレクションの設定
const collection_name:string = config_env.mongo_collection
const datas = db.collection(collection_name)

//データ取得
const all_data = await datas.find();
console.log(all_data)
  • ENVファイルはプロジェクトの直下に置きたいのでファイルを指定する方式にしました。環境変数を使って開発と本番を切り替える事もできると思いますしたい

結果

$ deno run --allow-net --allow-write --allow-read  --allow-plugin --unstable testsimpleServer.ts

INFO load deno plugin "deno_mongo" from local "D:\git\deno_study\REST_API_mongodb\controllers\.deno_plugins\deno_mongo_d39a70f1ebd90a74818be406f169051f.dll"
Connecting to ds247569.mlab.com:NNNNN
[
  {
      _id: { $oid: "5ae728876919a42acfa3ccc9" },
      name: "masalib",
      email: "masalib@gmail.com",
      avatar: "//www.gravatar.com/avatar/a164223d60979eeaab050d60ed8f2056?s=200&r=pg&d=mm",
      password: "$2ccccddddd$ss1ss0$sOCxXb/9iTTFWa0C.GXccVOYAjxnDW7HsswHEd.5aoM4JzhdOXO/5y",
      date: 2018-04-30T14:30:31.778Z,
      __v: 0
    },
  {
      _id: { $oid: "5aee9141ddcdb40f63cfc9f1" },
      name: "masalibtest",
      email: "masalibtest@yahoo.co.jp",
      avatar: "//www.gravatar.com/avatar/a5f215c7a7c759994c67dfe53d56b16d?s=200&r=pg&d=mm",
      password: "$2a$10$NEJ188sIByqNraTGKJ3uB.hOJWGZmDUYq6yWm4VXAaoWqVFpyJk72",
      date: 2018-05-06T05:23:13.850Z,
      __v: 0
    }
]

無料だからなのかちょっと遅い・・・そちらは諦めるかな

参考URL

qiita.com