首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MongoError:未授权插入/查询;stackato

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

Stack Overflow用户
提问于 2014-03-07 09:05:05
回答 2查看 3.5K关注 0票数 0

这是公司项目的一部分。我正试图在我的公司提供的stackato服务器上托管一个应用程序。我的应用程序有一个支持mongodb的节点框架。我编写了一个简单的脚本,试图连接到db服务并插入一个JSON对象。我能够成功地连接到数据库,但是在插入时,返回一个错误:

MongoError:未授权在db:componentlist上插入

我的代码:

代码语言:javascript
复制
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,以再次确认没有成功插入任何数据。我是否遗漏了所需的额外授权命令?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-07 10:11:45

不确定用于身份验证的服务器选项。现在首选的方法是将MongoClient类用于如下所示的连接:

代码语言:javascript
复制
var MongoClient = require("mongodb").MongoClient;

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

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

这是首选的,但以防凭据传递的方式有问题,因为这种方式是记录在案的。这只是为了确保您正在连接作为您打算使用的用户帐户。

除此之外,只要这个用户是正确的用户,那么这个错误就意味着这个用户没有权限对数据库进行插入。因此,您可能需要检查已授予该使用的权限。因此,该帐户需要应用readWrite角色。

票数 2
EN

Stack Overflow用户

发布于 2015-07-09 17:47:34

很抱歉,如果这是一个很晚的反应,但也许这可以帮助其他有类似问题的人。但在我的Stackato环境中,我遇到了同样的问题。因此,您的数据库名似乎设置为"componentlist“,但在stackato中,它将执行mongodb替换,它通常具有随机生成的用户名、密码和某些固定的设置主机和端口,如果使用Stackato ssh登录到stackato实例并运行"env”命令,您可能会看到用于连接到stackato创建的mongodb服务的URI。数据库名称很可能是"db“,而且由于您试图连接到"componentlist”,因此将出现授权失败。

如果将数据库名更改为"db“,则可能有效。我正在努力弄清楚如何在我的stackato.yml文件中将数据库名设置为更具体的内容。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22245704

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档