【问题标题】:How to configure MongoDb connection (dbConnection.js file) with MongoDB Node.JS Driver如何使用 MongoDB Node.JS 驱动程序配置 MongoDb 连接(dbConnection.js 文件)
【发布时间】:2018-05-24 12:11:27
【问题描述】:

我正在尝试在我的 dbConnection.js 中配置连接
将我在 Mlab 中托管的 MongoDb 连接到我在 Heroku 中托管的 NodeJs 应用程序。

我认为问题是允许的。

我的问题:我怎样才能使用 ONLY 默认的 MongoDb 驱动程序配置“connectionString”(例如,没有 Mongoose 和类似的东西。我想制作和学习基本和默认方法)

我的应用结构:


我的应用程序有一个调用 server.js 的 App.Js

/* importar as configurações do servidor */
var app = require('./config/server');


var port = (process.env.PORT || 8080);

/* parametrizar a porta de escuta */
app.listen(port, function(){
    console.log('');
    console.log('|*****************************************************|');
    console.log('|----------- Servidor online na porta: ' + port + ' ----------|');
    console.log('|*****************************************************|');
    console.log('');
})

我的 server.js 使用 MongoDb,包括 dbConnection.js

server.js

...some code

mongodb  = require('mongodb'), //  <--- var para o banco de dados
objectId = require('mongodb').ObjectId;

//var url = PROD_MONGODB //'mongodb://localhost:27017/my_database_name';      
var url = process.env.MONGOLAB_URI;

... some code

我的 dbConnection.js var connMongoDB 是:

 /* Importar o MongoDB */
var mongo = require('mongodb');


/*var connMongoDB =  function(){
    console.log('========== Entrou na function de connection!  =============');
    var db = new mongo.Db(
            'OPDC',             // PARAM 1 = nome do banco
            new mongo.Server(   // PARAM 2 = objetos basicos de conexao
                'localhost', // string  contendo o endereco  do servidor
                27017,       // porta       
                {}           // opc de config do servidor
            ),
            {}                  //  PARAM 3 = configs opcionais
        );

    return db;
}*/


var connMongoDB =  function(){
    console.log('========== Entrou na function de connection!  =============');
    var db = new mongo.Db(
            'heroku_f6bst99r',       // PARAM 1 = database name
            new mongo.Server(        // PARAM 2 = basic objects for connection
                'ds129776.mlab.com', // string  with the server address
                29776,       // port        
                {}           // server config options?
            ),
            {}                  //  PARAM 3 = opcionals configs 
        );

    return db;
}

module.exports = function(){
    return connMongoDB;
}

一些观察:

  • 本地主机(应用程序和数据库)一切正常
  • 已发布的节点在没有数据库连接的情况下仍然可以工作(例如一个简单的返回消息
  • 我仍然可以连接和使用我托管的 Mlab MongoDb

错误如下: 地址:https://opdcapi.herokuapp.com/ 错误:

{"name":"MongoError","message":"not authorized on heroku_f6bst99r to execute command { find: \"brand\", filter: {} }","ok":0,"errmsg":"not authorized on heroku_f6bst99r to execute command { find: \"brand\", filter: {} }","code":13,"codeName":"Unauthorized"}

GITHUB 项目:https://github.com/frotaadriano/opdc_nodeAPI

【问题讨论】:

  • 改用mongoClient,效果更好
  • 我已经在DAO中使用了mongoClient IndexDAO.prototype.getBrands= function(res){ //res.send({msg:'API在线!!!!!!!!!'} ); this._connection.open(function(err, mongoclient){ mongoclient.collection("brand", function(err, collection){ collection.find().toArray(function(err, result){ console.log(result); if(err){ //res.status(404).json(err); res.json(err); }else{ //res.status(200).json(result); res.json(result); } mongoclient.close(); // 获取一个 conexao }); }); }); }
  • 那么就Mongoclient.connect("mongod://&lt;mlab username&gt;:&lt;mlab pass&gt;@&lt;address&gt;.mlab.com:&lt;PORT&gt;/&lt;database name&gt;") 例如mongodb://&lt;adminuser&gt;:&lt;password&gt;@ds012345-a0.mlab.com:56789/mydb
  • 我可以把这个放在我的代码什么地方??

标签: node.js mongodb heroku mlab


【解决方案1】:

在 dbConnection.js 中:

const MongoClient = require('mongod').MongoClient;
const dbUrl = "mongod://<mlab username>:<mlab pass>@<address>.mlab.com:<PORT>/<database name>";

MongoClient.connect(dbUrl,function(err,db){
           //code
});

【讨论】:

  • 抱歉,我不明白我需要做的所有更改。我有 dbConnection.js 并且我在控制器中的索引和至少 IndexDAO 之后将应用程序传递给路由中的索引。我是否需要将所有 dbConnection.js 替换为您的建议代码?我可以在哪里执行我的 CRUD,在 dbConnection 而不是我的 MVC 结构中?
  • 是的,您可以重新连接您的 dbconnection,但必须从 dbConnection.js 导出 db 对象才能在其他文件中操作 CRUD 操作。如何导出我可以回答,但已经有很多答案,例如:stackoverflow.com/questions/17647779/…
猜你喜欢
  • 2017-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多