web-dev-qa-db-ja.com

MongoDB-エラー:スキーマが無効です。mongodbが必要です

私はMEAN Stackでアプリケーションを構築するのが初めてです。リアルタイムチャットアプリを構築しようとしています。これがサーバーサイドです。

console.log("Server running...!");

var mongo=require('mongodb').MongoClient;
var client=require('socket.io').listen(8080).sockets;

mongo.connect('localhost:27017/db/chat',function(err,db){
if(err)  throw err;

client.on('connection',function(socket){
console.log('someone has connected !');

//waiting for input
socket.on('input',function(data){
console.log(data);
});

});

});

私はmongodbとのチャットと呼ばれるデータベースを作成したと確信しています。また、mongoも接続を待っています。しかし、ノードserver.jsでサーバーを実行すると、エラーが発生します:

Server running...!
C:\Users\azus\Desktop\Psirt\codemaster\node_modules\ mongodb\lib\url_parser.js:20
  throw new Error('invalid schema, expected mongodb');
  ^

Error: invalid schema, expected mongodb
at module.exports (C:\Users\azus\Desktop\Psirt\code-master\node_modules\mong
 odb\lib\url_parser.js:20:11)
at connect (C:\Users\azus\Desktop\Psirt\code-master\node_modules\mongodb\lib
 \mongo_client.js:125:16)
at Function.MongoClient.connect (C:\Users\azus\Desktop\Psirt\code-master\nod
e_modules\mongodb\lib\mongo_client.js:109:3)
at Object.<anonymous> (C:\Users\azus\Desktop\Psirt\code-master\server.js:6:8
)
at Module._compile (module.js:413:34)
at Object.Module._extensions..js (module.js:422:10)
at Module.load (module.js:357:32)
at Function.Module._load (module.js:314:12)
at Function.Module.runMain (module.js:447:10)
at startup (node.js:139:18)

C:\Users\azus\Desktop\Psirt\code-master>

私はこのフェーズで数週間ブロックされていましたが、誰か助けていただけますか?

ありがとう。

35
Ahmed202

これは、不適切な形式の接続文字列を使用しているためです。

localhost:27017/db/chatでなければならないのにmongodb://localhost:27017/db/chatを使用しています

接続文字列のパターンはmongodb://<HOSTNAME>:<PORT>/<DBNAME>です

参考記事: https://mongodb.github.io/node-mongodb-native/api-generated/mongoclient.html#mongoclient-connect

110
Jonathan Muller

私もこの問題を抱えていましたが、それはプロトコルが間違っていたためでした:

mongo://localhost:27017/test

プロトコルが間違っていると、このエラーが発生する可能性もあります。次のようになります。

mongodb://localhost:27017/test
6
Mike Cheel

環境変数を引用符で囲むとエラーが発生する場合があります。それらを一度削除してから試してください。役立つかもしれません。

エラーがある可能性があります:

 set DATABASE_URI='mongodb://localhost:1000/my_app' && node index.js

正しいコマンドは次のとおりです。

  set DATABASE_URI=mongodb://localhost:1000/my_app && node index.js
3
prodeveloper

これを試してください、それは動作します:

mongoose.connect('mongodb://localhost:27017/shopping');

同じ問題を見つけました。ダムウィンドウは環境に引用を保存します。

したがって、Windowsを使用してこの方法で記述した場合はSET MONGO_URL="mongodb://localhost:27017/{name of your db}"正しくありません。

正しい方法はSET MONGO_URL=mongodb://localhost:27017/{name of your db} 引用符なし。

また、プロトコルを正確に記述する必要があることを発見しました-mongodb。ファイルurl_parser.jsからプロトコルをチェックするコードがあります

var result = parser.parse(url, true);

if(result.protocol != 'mongodb:') {
    throw new Error('invalid schema, expected mongodb');
}
1
Ivan Ivan

当たり前のように思えるかもしれませんが、一般に無効な値をmongoクライアントに渡すと、このエラーが発生します。 undefined。私が設定オブジェクトの間違ったキーを参照していたときにこれに走りました。

0
Adam Reis

この行の内容を

mongo.connect('localhost:27017/db/chat',function(err,db)

mongo.connect('mongodb://localhost:27017/db/chat',function(err,db)

その後、MongoDBデータベースに正常に接続できます。

0
Jerry Chong

作業コードは次のようになります

usernamepasswordURLを置き換えることを忘れないでください

const socketClient = require('socket.io').listen(4000).sockets;
const MongoClient = require('mongodb').MongoClient;

const uri = "mongodb+srv://<username>:<password>@cluster0-saugt.mongodb.net/test?retryWrites=true&w=majority";

const client = new MongoClient(uri, { useNewUrlParser: true });
client.connect(err => {
    socketClient.on('connection', function (socket) {

        //Need to Get the Database first before trying to access the collections.
        let chat = client.db("test").collection('chats');

        // Get chats from mongo collection
        // perform actions on the collection object
        chat.find().limit(100).sort({ _id: 1 }).toArray(function (err, res) {
            if (err) {
                throw err;
            }

            // Emit the messages
            socket.emit('output', res);
        });


    });

});
0
Jamil Noyda