MongoError: 在连接socket.io时,未被授权在数据库上执行命令。

3

我无法从socket.io连接到我的mongodb。当我运行server.js时,它显示已连接到mongodb并且已连接到套接字,但随后出现错误。

MongoError: not authorized on db to execute command find.

我已经登录Mongo的admin数据库,身份为管理员用户,然后进入“chat”数据库,在该数据库中创建了一个新用户,并赋予“readWrite”角色。

use chat

然后:

db.createUser({user: "testuser", pwd: "testuser", roles: [{role: "readWrite", db: "chat" }]})
Successfully added user: {
    "user" : "testuser",
    "roles" : [
        {
            "role" : "readWrite",
            "db" : "chat"
        }
    ]
}

用户已创建。 当我使用 db.auth("testuser","testuser") 进行测试时,返回 1。 然后我退出并转到我的 bin 文件夹,在那里我输入:mongo.exe -u testuser -p testuser chat; 接下来它连接到 mongodb://127.0.0.1:127017/chat 然后我打开一个新提示符,进入连接到数据库的 server.js 所在的文件夹并运行它,然后它首先表示服务器正在运行,并且已经与 mongodb 连接。
当我转到我的聊天页面并加载它时,它显示:MongoError not authorized...
我像这样连接我的 server.js 文件。
var port = process.env.PORT || 3000;
server.listen(port);
console.log('Server running *:'+port);

var io = require('socket.io').listen(server);
var mongoose = require('mongoose');

//mongoose.connect('mongodb://127.0.0.1:27017/chat', function(err){
mongoose.connect('mongodb://localhost/chat', function(err){

我不知道我错了什么,我已经按照mongodb文档并在网上查找了很多,但是不确定我在哪里出错了。

非常感谢您的任何建议。

当我加载聊天页面并查看控制台时,我会收到此错误。

https://manmade.se:3000/socket.io/?EIO=3&transport=polling&t=Lceu0Ot&sid=wbFhDl7yylt4_4a1AAAA net::ERR_CONNECTION_RESET

index_webb.html:1 WebSocket connection to 'wss://manmade.se:3000/socket.io/?EIO=3&transport=websocket&sid=wbFhDl7yylt4_4a1AAAA' failed: WebSocket is closed before the connection is established.

你确定你连接的是正确的端口吗? - Philip Bergström
是的,之前我已经让它工作了,但是后来我重新安装了mongodb,现在我无法让它工作。 - Claes Gustavsson
1个回答

3
错误似乎表明您的程序没有在正确的数据库上进行身份验证。
在您的特定情况下,从shell连接时,这将导致错误:
mongo -u test -p test

您需要指定聊天数据库:

mongo chat -u test -p test

我不认为这是一个socket错误,因为你已经连接成功了。错误信息似乎表明你没有在正确的数据库上进行身份验证(在这种情况下是聊天数据库)。


好的,在出现问题的代码中,我看到你正在连接聊天数据库,你在哪里指定连接时使用的用户名和密码? - masterforker
是的,这就是我在做的事情,或者至少在尝试着做;-) 在Mongohub连接提示中包含以下信息:主机:manmade.se,端口:27017,然后是用户名和密码,最后是数据库:chat。Mongohub是我发现的唯一免费的MongoDB用户界面。你知道还有其他的吗? - Claes Gustavsson
为什么不尝试使用老牌的Mongo Shell呢?它一直以来都很可靠。 - masterforker
嗯,丹,哈哈。只要我有启动server.js文件的终端,它就能正常工作。那个终端里有mongoose.connect('mongodb://testuser:yourpassword@127.0.0.1:‌​27017/chat'。为什么会这样呢?如果我尝试使用net start MongoDB启动mongodb,它会说正在运行。如果我再次运行server.js文件,它又会重新启动。今天已经遇到了16个小时的问题,我必须去睡觉了,但如果你能想到任何事情,我真的很感激,非常感谢你的帮助,丹。 - Claes Gustavsson
我收到的错误是:https://manmade.se:3000/socket.io/?EIO=3&transport=polling&t=LcffHcP net::ERR_CONNECTION_TIMED_OUT - Claes Gustavsson
显示剩余14条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接