質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
MongoDB

MongoDBはオープンソースのドキュメント指向データベースの1つです。高性能で、多くのリトルエンディアンシステムを利用することができます。

Q&A

解決済

1回答

4995閲覧

MongoDBのエラー ERR TypeError: Cannot read property 'collection' of nullに関して

zyunnsalome

総合スコア26

MongoDB

MongoDBはオープンソースのドキュメント指向データベースの1つです。高性能で、多くのリトルエンディアンシステムを利用することができます。

0グッド

0クリップ

投稿2016/04/14 05:22

mongodbをローカルやクラウド上にディプロイする際に時たまエラーが起こり、ログにでてくるのが以下のものなのですが、MongoDBが下記のようなエラーを吐き出しやすい理由などあるのでしょうか?

ERR TypeError: Cannot read property 'collection' of null

原因不明で、再インストールなどをすると戻ったりするのですが、これでは、こわくて、データをいれたりすることができないという状況です。

製品自体に弱点があるのか、ソースコードによっては、こういったエラーを吐き出しやすくなるなど、詳しい方がございましたら教えていただけませんでしょうか?

ちなみにソースコードは、以下です。
var express = require('express');

var bodyParser = require('body-parser');

var mongodb = require('mongodb');
var app = express();

var users;

app.use(express.static('public'));

app.use(bodyParser.json());

var cfenv = require('cfenv');
var appEnv = cfenv.getAppEnv();
app.listen(appEnv.port);

mongodb.MongoClient.connect("mongodb://URL", function(err, database) {

users = database.collection("users");
});

// 一覧取得
//users.find() でコレクション全体を取得し、toArray で配列にして出力。
//$resource の query() に対応

app.get("/api/users", function(req, res) {
users.find().toArray(function(err, items) {
res.send(items);
});
});

// 個人取得
//指定したObjectIdのドキュメントを users.findOne() で取得し出力。
//ObjectIdは文字列型では無いので変換
app.get("/api/users/:_id", function(req, res) {
users.findOne({_id: mongodb.ObjectID(req.params._id)}, function(err, item) {
res.send(item);
});
});

// 追加・更新
// 新規データ列と更新ロジックを実装
app.post("/api/users", function(req, res) {
var user = req.body;
if (user._id) user._id = mongodb.ObjectID(user._id);
users.save(user, function() {
res.send("insert or update");
});
});

// 削除
app.delete("/api/users/:_id", function(req, res) {
users.remove({_id: mongodb.ObjectID(req.params._id)}, function() {
res.send("delete");
});
});

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

このエラーは

mongodb.MongoClient.connect("mongodb://URL", function(err, database) { users = database.collection("users"); });

で、コールバックに渡されるパラメータdatabaseが、nullになって出ているのでは???

ということで、

if(database == null)

の検査を入れるとか、
あと、そもそもdatabaseがなぜnullになるのかという理由("mongodb://URL"の接続が不安定とか)を探られたらよいのでは???

投稿2016/04/14 05:37

ItoTomonori

総合スコア1283

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

zyunnsalome

2016/04/14 14:47

ありがとうございます。特に何もしてないのですが、今しがたアプリが起動するようになりました。 サービス側の問題なのかもしれません。。 おてすうおかけいたしました。 
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問