这是公司项目的一部分。我正在尝试在我公司提供的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上插入
我在线检查了数据库以再次确认没有成功插入数据。 我错过了所需的任何额外授权命令吗?
答案 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文件中将数据库名称设置为更具体的内容。