【ドットインストール】Node.js講座の仕様変更点【 #15 ドキュメントを挿入してみよう】
はじめに
ドットインストールの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.」
mongoDBに割り当てられているアドレスを知る
MongoClient.connectを記述する時、第一引数に、mongoDBに割り当てられているアドレスを記述する必要がある。
デフォルトでmongoDBに割り当てられているアドレスを知るには、ターミナルで「mongo」コマンドを入力し、mongoDBがどのアドレスにconnectしているか調べる
講座のままだとエラーになる箇所
ドットインストールの講座のコードのまま実行すると、ターミナルに「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) { return console.dir(err); }
console.log("connected to db");
db.collection("users", function(err, collection) {
//dbはリターンされてないので存在しない
<MongoDB 3.0に対応したコード>
var MongoClient = require('mongodb').MongoClient
//データベースに接続する関数に渡す第一引数である、mongoDBのアドレスは、定数に格納する方がスッキリする
const url = 'mongodb://localhost:127.0.0.1:27017/myDB'
// callbackに渡されるオブジェクトが(err, db)から(err, client)に変わった
MongoClient.connect(url, (err, client)=> {
// db名を指定してdbオブジェクトを取得する必要がある
const db = client.db('localhost:127.0.0.1:27017')
if (err) { return console.dir(err); }
console.log("connected to db");
db.collection("users", function(err, collection) {
var docs = [
{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
Author And Source
この問題について(【ドットインストール】Node.js講座の仕様変更点【 #15 ドキュメントを挿入してみよう】), 我々は、より多くの情報をここで見つけました https://qiita.com/Molly95554907/items/ced80b066f94f1b46c87著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .