无法在服务器NodeJS上的Mongo中创建用户(或基于自定义的角色)

时间:2017-11-22 19:09:56

标签: javascript mongodb express createuser

我正在尝试直接从我们的Express服务器上创建用户数据库,使用Mongo 3.4作为数据库。以下是服务器的代码:

var express = require('express');

var bodyParser = require('body-parser');
var app = express();
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());

var MongoClient = require('mongodb').MongoClient;
var url = 'mongodb://mongo:27017/myDb';

var dbvotes = "collection1";
var dbusers = "collection2";


//Functions for users
app.post('/newUser', function(req, res, db) {

    MongoClient.connect(url, function(err, db){

        //Ecriture dans la base user
        db.collection(dbusers).insertOne( {
            "name" : req.body.name,
            "surname" : req.body.surname,
            "username" : username,
            "password" : "pasadmin",
         });

        //Creation of the user in the DB
        db.createUser( { 'user': username, 'pwd': "pasadmin", roles: [] });


        db.close();
        });
    console.log("Inserted a new user in the database.");
    res.send("User added. Click precedent to add a new user.");
});

但是,每当客户端尝试插入新用户时,它都会在用户集合中有效创建,但不会作为数据库的用户创建,因为我收到以下错误:TypeError:db.createUser不是函数 web_1 |在/app/app.js:47:6。

我试图改为使用db.addUser,但是,由于Mongo 2.6并且不工作,因此db.adminCommand服务相同的错误,db.adminCommand不是函数。在此之前,我努力使用Node在数据库中创建自定义角色,并决定通过Mongo shell进行自定义角色,但在数据库中添加用户1时,它不是一个选项。

当我在Mongo shell中使用这些函数时,命令正在运行,所以我认为它来自我在服务器中实现Mongo的方式(通过Docker),或者由于Javascript的一些限制。知道它会是什么?

先感谢社区!

1 个答案:

答案 0 :(得分:0)

我无法使用

这样的代码将用户添加到管理数据库中

db.js

var  Db = require('mongodb').Db,

MongoClient = require('mongodb').MongoClient,

Server = require('mongodb').Server;

var db = new Db('admin', new Server('localhost', 27017));

db.addUser('superuser', '1234', {
roles: [    "userAdminAnyDatabase",
            "dbAdminAnyDatabase",
            "clusterAdmin",
            "readWriteAnyDatabase"
        ]  

    },

 function(err, result) {
        if (err) { return console.log(err);
 }

 console.log("Added.");

});

它会引发类似错误

TypeError: Cannot read property 'maxWireVersion' of null
    at AddUserOperation._buildCommand (/home/sp/practice/myapp/node_modules/mongodb/lib/operations/add_user.js:46:56)
    at AddUserOperation.execute (/home/sp/practice/myapp/node_modules/mongodb/lib/operations/command.js:82:22)
    at AddUserOperation.execute (/home/sp/practice/myapp/node_modules/mongodb/lib/operations/add_user.js:87:11)
    at executeOperation (/home/sp/practice/myapp/node_modules/mongodb/lib/operations/execute_operation.js:81:17)
    at Db.addUser (/home/sp/practice/myapp/node_modules/mongodb/lib/db.js:823:10)
    at Object.<anonymous> (/home/sp/practice/myapp/app/config/db.js:25:8)
    at Module._compile (internal/modules/cjs/loader.js:805:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:816:10)
    at Module.load (internal/modules/cjs/loader.js:672:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:612:12)
    at Function.Module._load (internal/modules/cjs/loader.js:604:3)
    at Module.require (internal/modules/cjs/loader.js:711:19)
    at require (internal/modules/cjs/helpers.js:14:16)
    at Object.<anonymous> (/home/samprathyusha/practice/myapp/app.js:26:1)
    at Module._compile (internal/modules/cjs/loader.js:805:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:816:10)