首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用节点管理到mongoDB的连接的正确方法是什么?

使用节点管理到mongoDB的连接的正确方法是什么?
EN

Stack Overflow用户
提问于 2015-12-27 09:31:51
回答 1查看 160关注 0票数 0

我正在使用node.js和mongoDB。现在,对于我的测试应用程序,到db的连接位于主节点文件中,但我想这是一个错误的实践。我想要/需要的:一种安全的方式(即在用户可以访问的文件中不存储密码)在需要时连接到数据库。

例如:我想要几个管理页面(用户、组等)。每个页面都应该连接到db,找到一些数据并显示出来。它还具有将文档添加到db和delete选项的表单。

我想也许可以创建某种连接函数--将您想要做的事情发送给它(添加、更新、查找、删除),发送到where (集合名称)以及它需要的任何东西。但是我不能只包含这个函数,因为这样它就会向db显示密码。那我能做什么呢?

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-27 11:08:43

我将一点一点地回答你的问题。

现在,对于我的测试应用程序,到db的连接位于主节点文件中。

这很好,不过为了便于重用,您可能需要将它放在单独的文件中。NodeJS是一个持续运行的过程,因此理论上您可以使用与数据库的相同连接来服务所有的HTTP响应。实际上,您可能希望创建一个连接池,但是NodeJS的Mongodb驱动程序已经自动创建了连接池。

每个页面都应该连接到db,找到一些数据并显示出来。

当您在MongoDB驱动程序上发出查询时,它将自动使用来自其内部连接池的连接,只要您在应用程序启动时给它提供凭据。

我想要/需要的:一种安全的方式(即在用户可以访问的文件中不存储密码)在需要时连接到数据库。

我建议您将应用程序配置(任何依赖于应用程序运行环境的变量)保存在一个单独的文件中,而您不提交给您的VCS。像节点配置这样的模块在这方面有很大的帮助。

最后使用节点-config的代码如下所示:

config/default.json:

代码语言:javascript
复制
{
  "mongo": null
}

这是您提交的默认配置文件。

config/local.json:

代码语言:javascript
复制
{
  "mongo": "mongo://user:pass@host:port/db"
}

local.json应该被VCS忽略。里面有秘密酱汁。

connection.js:

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

module.exports = function(callback){
  if(cache){
    return callback(cache);
  }
  MongoClient.connect(config.get('mongo'), function(err, db){
    if(err){
      console.error(err.stack);
      process.exit(1);
    }
    cache = db;
    callback(db);
  });
}

如何处理重用数据库连接的不完整示例。注意如何使用config.get(*)获得配置。一个实际的实现应该有更健壮的错误处理和防止多个连接被建立。使用应许会使这一切变得容易得多。

index.js:

代码语言:javascript
复制
var connect = require('./connection');
connect(function(db){
  db.find({whatever: true})
});

现在你只需要你想要的任何地方的数据库文件,重用相同的数据库连接,它为你处理池,你的密码没有硬编码在任何地方。

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

https://stackoverflow.com/questions/34479199

复制
相关文章

相似问题

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