MongoDB - 错误:架构无效,预期mongodb

时间:2016-03-05 11:34:35

标签: node.js mongodb mean-stack

我是使用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);
});

});

});

我确信我创建了一个名为chat with 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>

我在这个阶段被封锁了好几个星期,有人可以帮忙吗?

感谢。

8 个答案:

答案 0 :(得分:107)

这是因为您使用的格式不正确。

您正在使用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

答案 1 :(得分:6)

我也遇到了这个问题,因为我的协议错了:

mongo://localhost:27017/test

协议错误也可能导致此错误。它应该是这样的:

mongodb://localhost:27017/test

答案 2 :(得分:3)

有时,错误可能与环境变量周围的引号有关。删除它们一次然后尝试。可能有帮助。

错误可能是:

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

正确的命令将是:

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

答案 3 :(得分:2)

试试这个,它有效:

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

答案 4 :(得分:0)

只是想出了同样的问题。破烂的窗户将引号保存在环境中。

因此,如果您使用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');
}

答案 5 :(得分:0)

更改此行的内容自

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

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

那么您就可以成功连接MongoDB数据库。

答案 6 :(得分:0)

工作代码如下

不要忘记替换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);
        });


    });

});

答案 7 :(得分:0)

更新您的mongodb npm版本