我在哪里把数据库连接信息在Node.js应用程序?

Node.js是我的第一个后端语言,而我正在问自己“我在哪里放置数据库连接信息?”。

关于这个问题有很多很好的信息。 不幸的是我所有的例子都在PHP中。 我得到的想法,但我没有足够的信心在Node.js复制它。

在PHP中,您可以将信息放在Web根目录外的configuration文件中,并在需要数据库数据时将其包含在内。

你将如何在Node.js中做到这一点? 使用Express.js框架。

到目前为止,我有这样的:

var express = require('express'), app = express(); var mysql = require('mysql'); app.get('/', function(req,res) { var connection = mysql.createConnection({ host: 'localhost', user: 'root', password: 'password', database: 'store' }); var query = connection.query('SELECT * from customers where email = "deelo42@gmail.com"'); query.on('error', function(err) { throw err; }); query.on('fields', function(fields) { console.log('this is fields'); }); query.on('result', function(row) { var first = row.first_name; var last = row.last_name; res.render('index.jade', { title: "My first name is " + first, category: "My last name is " + last }); }); }); app.listen(80, function() { console.log('we are logged in'); }); 

正如你所看到的,我有一个GET路由的基本快速应用程序。 这个路由设置了去数据库的function,并根据电子邮件地址提取信息。

GET路由的顶部是数据库连接信息。 我在哪里放? 我怎样称呼它? 我如何保持它的Web根,并包括它像PHP? 你能以一个实例来展示我吗? 谢谢!

我使用快速中间件的概念相同,并给我很好的灵活性来pipe理文件。

我正在写一个详细的答案,其中包括我如何使用app.js中的configuration参数连接到数据库。

所以我的应用程序结构看起来如此: 在这里输入图像描述

我如何连接到数据库? (我正在使用MongoDB,mongoose是ORM,npm安装mongoose)

 var config = require('./config/config'); var mongoose = require("mongoose"); var connect = function(){ var options = { server: { socketOptions:{ keepAlive : 1 } } }; mongoose.connect(config.db,options); }; connect(); 

在config文件夹下我还有'env'文件夹,它将环境相关的configuration存储在单独的文件中,比如development.js,test.js,production.js

现在顾名思义,development.js存储了与我的开发环境相关的configuration参数,同样适用于testing和生产的情况。 现在,如果你希望你可以有更多的configuration设置,如“舞台”等

项目名称/configuration/ config.js

 var path = require("path"); var extend = require("util")._extend; var development = require("./env/development"); var test = require("./env/test"); var production = require("./env/production"); var defaults = { root: path.normalize(__dirname + '/..') }; module.exports = { development: extend(development,defaults), test: extend(test,defaults), production: extend(production,defaults) }[process.env.NODE_ENV || "development"] 

项目名称/configuration/ ENV / test.js

 module.exports = { db: 'mongodb://localhost/mongoExpress_test' }; 

现在,通过将url分为用户名,密码,端口,数据库,主机名,可以使其更具描述性。

对于更多的细节看看我的回购 ,在那里你可以find这个实现,实际上现在在我所有的项目中我使用相同的configuration。

如果你更感兴趣,那么看看Mean.js和Mean.io ,他们有更好的方法来pipe理所有这些事情。 如果你是初学者,我会build议保持简单,让事情顺利,一旦你感到舒服,你可以自己执行魔法。 干杯

我推荐12因子应用风格http://12factor.net ,它将所有这一切都保存在env vars中。 你永远不应该有这样的信息硬编码或应用程序的源代码/回购,所以你可以重用它在不同的环境,甚至公开分享它没有破坏安全。

然而,由于有很多环境variables,所以我倾向于把它们放在一起,就像以前的响应者写的一样 – 虽然它不在源代码回购中 – 然后用https://www.npmjs .ORG /包/ dotenv

另一种方法是手动完成并保存,例如./env/dev.json ,只require()该文件。

任何这些工作,重要的一点是保持所有configuration信息与代码分离。

我同意评论者的意见,把它放在一个configuration文件中。 没有最终的方法,但nconf也是我的最爱之一。

最重要的最佳做法是,如果您有半公开项目,则保持configuration不同,因此您的configuration文件不会覆盖其他开发人员。

 config-sample.json (has to be renamed and is tracked with for example git) config.json (not tracked / ignored by git)