MongoError:未授权插入/查询; stackato

时间:2014-03-07 09:05:06

标签: mongodb node-mongodb-native stackato

这是公司项目的一部分。我正在尝试在我公司提供的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();
        });
    });     

});

当我在安装了node和mongodb的机器上运行时,终端返回此项。 这些是一组可与代码相关的控制台日志消息

  

连接到在线数据库,现在将数据存储在:db,db打开。,   无法将对象插入组件列表MongoError:未授权   用于在db.componentlist上插入

我在线检查了数据库以再次确认没有成功插入数据。 我错过了所需的任何额外授权命令吗?

2 个答案:

答案 0 :(得分:2)

不确定用于身份验证的服务器选项。现在首选的方法是使用MongoClient类进行连接,如:

var MongoClient = require("mongodb").MongoClient;

MongoClient.connect(
    "mongodb://<user>:<pass>@<host>:<port>/<db>", function(err, db) {

    // everything else inside your "open.db" call

这是首选,但万一传递凭据的方式有问题,因为这种方式很好documented。这只是为了确保您作为您打算使用的用户帐户进行连接。

除此之外,只要这是正确的用户,那么错误表明该用户缺少在数据库上执行插入的权限。因此,您可能需要检查已授予使用权限的权限。因此,该帐户需要应用readWrite角色。

答案 1 :(得分:1)

很抱歉,如果这是一个非常晚的回复,但也许这可以帮助其他人遇到类似的问题。但我在Stackato环境中遇到了同样的问题。因此,您似乎已将数据库名称设置为&#34; componentlist&#34;但是在Stackato中它将执行mongodb URI替换,它通常具有随机生成的用户名,密码和某些固定的集合主机和端口,如果您使用stackato ssh登录到stackato实例并运行&#34; env&#34;命令您可能会看到用于连接到stackato创建的mongodb服务的确切URI。数据库名称很可能是&#34; db&#34;因为你正试图连接到&#34;组件列表&#34;您将获得授权失败。

如果您将数据库名称更改为&#34; db&#34;它可能会奏效。我试图弄清楚如何在我的stackato.yml文件中将数据库名称设置为更具体的内容。