Quantcast
Channel: Node.jsタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 8691

【ドットインストール】Node.js講座の仕様変更点【 #15 ドキュメントを挿入してみよう】

$
0
0

はじめに

ドットインストールのNode.js講座は最終更新日が2014年のままアーカイブされていて、講座内容そのままやってもうまくいかない箇所がある。

「» #15 ドキュメントを挿入してみよう」
の章では、Node.jsのMongoClientの仕様が変わっているため、エラーが出てしまった。新しい仕様に対応した正しいやり方をメモしておく。

mongoDBの公式ドキュメントでは、バージョン3以降、MongoClient.connectにリターンする値がDBからClientに変わったと書かれている。

「What’s new in 3.0
・MongoClient.connect now returns a Client instead of a DB.」

http://mongodb.github.io/node-mongodb-native/3.0/upgrade-migration/main/

mongoDBに割り当てられているアドレスを知る

MongoClient.connectを記述する時、第一引数に、mongoDBに割り当てられているアドレスを記述する必要がある。
デフォルトでmongoDBに割り当てられているアドレスを知るには、ターミナルで「mongo」コマンドを入力し、mongoDBがどのアドレスにconnectしているか調べる

スクリーンショット 2020-06-03 20.15.28.png

講座のままだとエラーになる箇所

ドットインストールの講座のコードのまま実行すると、ターミナルに「node mongo.js」を入力した際に以下のエラーが返ってくる。

TypeError: db.collection is not a function

原因は、MongoDB 3.0以降、MongoClient.connectにリターンする値がDBからClientに変わったこと。
<ドットインストールのコードの問題箇所>

MongoClient.connect("mongodb://"+settings.host+"/"+settings.db,function(err,db){ //dbはリターンされないので引数に取れないif(err){returnconsole.dir(err);}console.log("connected to db");db.collection("users",function(err,collection){//dbはリターンされてないので存在しない

<MongoDB 3.0に対応したコード>

varMongoClient=require('mongodb').MongoClient//データベースに接続する関数に渡す第一引数である、mongoDBのアドレスは、定数に格納する方がスッキリするconsturl='mongodb://localhost:127.0.0.1:27017/myDB'// callbackに渡されるオブジェクトが(err, db)から(err, client)に変わったMongoClient.connect(url,(err,client)=>{// db名を指定してdbオブジェクトを取得する必要があるconstdb=client.db('localhost:127.0.0.1:27017')if(err){returnconsole.dir(err);}console.log("connected to db");db.collection("users",function(err,collection){vardocs=[{name:"taguchi",score:40},{name:"fkoji",score:80},{name:"dotinstall",score:60}];collection.insert(docs,function(err,result){console.dir(result);});});});

データベースの確認方法

①ターミナルから確認
ターミナルに「node mongo.js」を入力すると、insertしたdocsの値が表示される

②mongoDBから確認
ターミナルに「mongo」を入力しmongoDBを起動

>show dbs;

localhost:27017 0.000GB
このデータベースに挿入したドキュメントが入っている

>show collections;

users
作成したusersコレクションが表示されている

>db.users.find();
insertしたdocsの値ががmongoDBに挿入されていると確認できる。

参考文献

Node.jsのMongoClientの仕様が変わってた
https://qiita.com/mimizq/items/76d3a948acb33881c8db

Node.jsからMongoDBに接続してみる
https://qiita.com/one-kelvin/items/c0c036f774f0b3b98ae5


Viewing all articles
Browse latest Browse all 8691

Trending Articles