我正在使用node.js和mongoDB。现在,对于我的测试应用程序,到db的连接位于主节点文件中,但我想这是一个错误的实践。我想要/需要的:一种安全的方式(即在用户可以访问的文件中不存储密码)在需要时连接到数据库。
例如:我想要几个管理页面(用户、组等)。每个页面都应该连接到db,找到一些数据并显示出来。它还具有将文档添加到db和delete选项的表单。
我想也许可以创建某种连接函数--将您想要做的事情发送给它(添加、更新、查找、删除),发送到where (集合名称)以及它需要的任何东西。但是我不能只包含这个函数,因为这样它就会向db显示密码。那我能做什么呢?
谢谢!
发布于 2015-12-27 11:08:43
我将一点一点地回答你的问题。
现在,对于我的测试应用程序,到db的连接位于主节点文件中。
这很好,不过为了便于重用,您可能需要将它放在单独的文件中。NodeJS是一个持续运行的过程,因此理论上您可以使用与数据库的相同连接来服务所有的HTTP响应。实际上,您可能希望创建一个连接池,但是NodeJS的Mongodb驱动程序已经自动创建了连接池。
每个页面都应该连接到db,找到一些数据并显示出来。
当您在MongoDB驱动程序上发出查询时,它将自动使用来自其内部连接池的连接,只要您在应用程序启动时给它提供凭据。
我想要/需要的:一种安全的方式(即在用户可以访问的文件中不存储密码)在需要时连接到数据库。
我建议您将应用程序配置(任何依赖于应用程序运行环境的变量)保存在一个单独的文件中,而您不提交给您的VCS。像节点配置这样的模块在这方面有很大的帮助。
最后使用节点-config的代码如下所示:
config/default.json:
{
"mongo": null
}这是您提交的默认配置文件。
config/local.json:
{
"mongo": "mongo://user:pass@host:port/db"
}local.json应该被VCS忽略。里面有秘密酱汁。
connection.js:
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:
var connect = require('./connection');
connect(function(db){
db.find({whatever: true})
});现在你只需要你想要的任何地方的数据库文件,重用相同的数据库连接,它为你处理池,你的密码没有硬编码在任何地方。
https://stackoverflow.com/questions/34479199
复制相似问题