node.js - 我应该将数据库连接信息放在 Node.js 应用程序的什么位置?

标签 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 路由的基本 express 应用程序。该路由触发了访问数据库并根据电子邮件地址提取信息的功能。

GET 路由的顶部是数据库连接信息。我把它放在哪里?我怎么调用它?如何将它保留在 Web 根目录之外,并像 PHP 一样包含它?你能给我看一个工作示例吗?谢谢!

最佳答案

我同样使用 Express 中间件概念,这让我可以非常灵活地管理文件。

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

所以我的应用程序结构看起来是这样的:enter image description here

我如何连接到数据库? (我用的是MongoDB,mongoose是ORM,npm install 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'文件夹,它将环境相关配置存储在单独的文件中,例如development.js,test.js,production.js

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

项目名称/config/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"]

项目名称/config/env/test.js

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

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

有关更多详细信息,请查看 my repo ,你可以在哪里找到这个实现,事实上现在我在我的所有项目中都使用相同的配置。

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

关于node.js - 我应该将数据库连接信息放在 Node.js 应用程序的什么位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27026619/

相关文章:

node.js - Hazelcast Jet 和 Node.JS 客户端序列化问题

node.js - bower 安装: unknown encoding

node.js - Express + Passport + Session。为每个页面加载执行查询

javascript - 如何在 express js 中使用 get 方法从 mongo db 中获取数据?

node.js - 优雅地关闭nodejs工作线程

node.js - 为什么在快速路由中调用 next() 是可选的?

javascript - Node.js 拦截 Promise 并阐述 Response

javascript - 如何在不重新启动 Express.js 项目的情况下刷新 API 端点

node.js - Helm : How to allow images to load from different domain (Err: NotSameOriginAfterDefaultedToSameOriginByCoep)

Node.js 和 socket.io 初始化 setInterval()