javascript - Node js 数据库连接在单独的模块中

标签 javascript node.js db2

我制作了包含一些 REST 服务的 Node.js 应用程序。这些服务连接到数据库(例如 Oracle 或 DB2)以执行某些查询。

由于我是node.js编程的初学者,所以我对我的案例有一个疑问: 访问数据库的正确方法是什么?在应用程序运行时拥有一个连接引用并在调用 REST 服务时使用相同的连接实例是否更好?

我发现了一些示例,其中在单独的模块中包含数据库连接并在应用程序中使用该模块,如下所示:

db2.js:

var db2 = require('ibm_db');

var db2ConnSettings = "DRIVER={DB2};DATABASE=mydb;HOSTNAME=localhost;UID=db2test;PWD=db2test;PORT=50000;PROTOCOL=TCPIP";

var db2Conn = db2.open(db2ConnSettings, function(err, conn) {
        if (err)
            return console.log(err);
    });

module.exports = db2Conn;

服务器.js:

var express = require('express');
var app = express();
var db2Connection = require('./db2.js');

app.get('/data', function(req, res) {
    console.log(db2Connection );
    // make some query
});

调用此服务时,db2connection未定义。怎么会?我应该如何从 db2.js 文件检索 db2 连接?

最佳答案

正如@Sirko所说:

db2.js

var db2 = require('ibm_db');
var db2ConnSettings = "DRIVER={DB2};DATABASE=mydb;HOSTNAME=localhost;UID=db2test;PWD=db2test;PORT=50000;PROTOCOL=TCPIP";

var err, conn;
var callbacks = [];

module.exports = function(callback) {
  // db2 module is called

  if (err || conn) {
    // connection has already been established
    //   (results of db2.open have been stored)
    // callback immediately
    callback(err, conn);
  }
  else {
    // connection has not been established
    // store the callback for when db connects
    callbacks.push(callback);
  }
};

db2.open(db2ConnSettings, function(_err, _conn){
  // db has connected

  err = _err; conn = _conn; // store results
  var next_callback;

  // array.pop() removed the last item from the array
  // and returns it. if no items are left, returns null.
  // so this loops through all stored callbacks.
  while(next_callback = callbacks.pop()) {
    // the removed item is stored in next_callback
    next_callback(err, conn); // send connection results to callback
  }

  // no more items in callbacks to trigger
});

服务器.js

var express = require('express');
var app = express();
var db2Connection = require('./db2.js')(function(err, conn) {
  // triggered if the connection has already been established
  // or as soon as it HAS been established
  app.get('/data', function(req, res) {
      console.log(conn);
      // ...
  });
});

关于javascript - Node js 数据库连接在单独的模块中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39287247/

相关文章:

javascript - 如何创建类似 Google Wave 的滚动条?

javascript - html 框架的复选框标签

javascript - AngularJS 1.2.2 中 $http 和 $httpBackend 的惯用组合

node.js - 查询字符串中有多个参数的 Express + Node 路由

node.js - 如何在 Express Node.js 中将一个版本的 url 重定向到另一个版本

javascript - Zombie.JS 不执行页面 javascript

db2 - 我们如何查看DB2过程以及如何执行DB2过程并仅使用DB2看到过程的输出

sql - 如果不存在则创建表语法 db2

javascript - 如何将数据从 DB2 获取到 AngularJS 应用程序中?

javascript - 如何在html中的javascript中显示内部图像