这是公司项目的一部分。我正试图在我的公司提供的stackato服务器上托管一个应用程序。我的应用程序有一个支持mongodb的节点框架。我编写了一个简单的脚本,试图连接到db服务并插入一个JSON对象。我能够成功地连接到数据库,但是在插入时,返回一个错误:
MongoError:未授权在db:componentlist上插入
我的代码:
var mongo = require('mongodb');
var Db = mongo.Db;
var Server = mongo.Server;
var services;
var dbcreds;
var dbcreds = {
//cant paste due to confidential reasons
};
var server = new Server(
dbcreds.host,
dbcreds.port,
{user: dbcreds.username, pass: dbcreds.password}
);
db = new Db(dbcreds.db, server,{w:1});
console.log('connecting to online db and now storing data in:' + dbcreds.db);
db.open(function(err, db) {
if (err) { console.log('db connection error: ' + err);}
console.log('db is opened.');
var component = [
{
platform: "alpha",
component1: "beta",
}];
db.collection('componentlist', function(err,collection){
collection.insert(component, function(err, result){
if(err){console.log("cannot insert the object into componentlist " + err);}
db.close();
});
});
});当我在安装了节点和mongodb的机器上运行它时,终端就会返回这个结果。这些是一组可以与代码相关联的控制台日志消息。
连接到联机数据库,现在将数据存储在: db中。,无法将对象插入组件列表MongoError:未授权在db.componentlist上插入
我检查了db online,以再次确认没有成功插入任何数据。我是否遗漏了所需的额外授权命令?
发布于 2014-03-07 10:11:45
不确定用于身份验证的服务器选项。现在首选的方法是将MongoClient类用于如下所示的连接:
var MongoClient = require("mongodb").MongoClient;
MongoClient.connect(
"mongodb://<user>:<pass>@<host>:<port>/<db>", function(err, db) {
// everything else inside your "open.db" call这是首选的,但以防凭据传递的方式有问题,因为这种方式是记录在案的。这只是为了确保您正在连接作为您打算使用的用户帐户。
除此之外,只要这个用户是正确的用户,那么这个错误就意味着这个用户没有权限对数据库进行插入。因此,您可能需要检查已授予该使用的权限。因此,该帐户需要应用readWrite角色。
发布于 2015-07-09 17:47:34
很抱歉,如果这是一个很晚的反应,但也许这可以帮助其他有类似问题的人。但在我的Stackato环境中,我遇到了同样的问题。因此,您的数据库名似乎设置为"componentlist“,但在stackato中,它将执行mongodb替换,它通常具有随机生成的用户名、密码和某些固定的设置主机和端口,如果使用Stackato ssh登录到stackato实例并运行"env”命令,您可能会看到用于连接到stackato创建的mongodb服务的URI。数据库名称很可能是"db“,而且由于您试图连接到"componentlist”,因此将出现授权失败。
如果将数据库名更改为"db“,则可能有效。我正在努力弄清楚如何在我的stackato.yml文件中将数据库名设置为更具体的内容。
https://stackoverflow.com/questions/22245704
复制相似问题