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

时间:2014-11-19 20:45:10

标签: node.js express

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

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

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

你会如何在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');
});

正如您所看到的,我有一个基本的快速应用程序,有1个GET路由。此路由引发了转到数据库并根据电子邮件地址提取信息的功能。

GET路由的顶部是数据库连接信息。我把它放在哪里?我怎么称呼它?如何将其保留在Web根目录之外,并将其包含在PHP中?你能用一个有效的例子告诉我吗?谢谢!

3 个答案:

答案 0 :(得分:7)

我使用Express Middleware概念,这为我提供了很好的管理文件的灵活性。

我正在写一个详细的答案,其中包括我如何使用app.js中的config params连接到DB。

所以我的app结构看起来像这样:enter image description here

我如何连接数据库? (我使用的是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();

在配置文件夹下我也有' env'文件夹,它将环境相关配置存储在单独的文件中,例如development.js,test.js,production.js

现在顾名思义,development.js存储与我的开发环境相关的配置参数,同样适用于测试和生产的情况。现在,如果您希望您可以进行更多配置设置,例如' staging'等

项目名/配置/ 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"]

项目名/配置/ ENV / test.js

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

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

有关更多详细信息,请查看my repo,您可以在其中找到此实现,实际上现在在我的所有项目中都使用相同的配置。

如果您对此感兴趣,请查看Mean.jsMean.io,他们有更好的方法来管理所有这些事情。如果你是初学者,我会建议保持简单并让事情顺利进行,一旦你感到舒服,你就可以自己动手。干杯

答案 1 :(得分:2)

我推荐12因素应用程序样式http://12factor.net,它将所有这些保留在环境变量中。您永远不应该使用硬编码的此类信息或应用程序源代码/存储库,因此您可以在不同环境中重复使用它,甚至可以公开共享它而不会破坏安全性。

但是,由于有很多环境变量,我倾向于将它们保存在单个env.js中,就像之前的响应者所写的那样 - 虽然它不在源代码仓库中 - 然后用{{{ 3}}

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

任何这些工作,重要的一点是将所有配置信息与代码分开。

答案 2 :(得分:0)

我同意评论者的意见,将其放在配置文件中。没有终极的方式,但nconf也是我的最爱之一。

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

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