node.jsではよくMongoDBのデータをとるサンプルをよく見たのでDenoでもMongoDBに接続して表示したいと思います
DBについて
ローカルに作ってもよかったのですがすごい前にMongoDBのWEBサービスを使った事があり、まだそちらが生きていたのでそちらを使う事にしました。テストで使うなら無料なのでオススメです。
登録画面が古い可能性がありますが、登録方法の記事です。
接続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 } ]
無料だからなのかちょっと遅い・・・そちらは諦めるかな