连接到Node.JS中的数据库

时间:2012-01-10 17:42:08

标签: database node.js asynchronous

对于某些特殊情况,例如'require',阻止执行,使事情更简单是有意义的。

我有类似的情况,我需要一种方法来建立数据库连接,阻止。 并且,因为它只发生一次 - 当应用程序启动并保存在全局对象中以供以后重用时 - 它不会影响性能。

问题:

  1. 节点没有'sleep'方法。
  2. 事件循环有一些技巧,你必须阻止它,但同时允许处理数据库连接的东西。
  3. 实际上我已经通过使用来自jasmine-node的waitFor来实现它,但是当我查看它的来源时 - 它非常复杂并且使用了phantomjs C-extensions。

    遗憾的是,简单while(true){...}的东西不起作用。例如,下面的代码不起作用,我相信因为它阻止了事件循环,并且不允许节点处理它等待的事件(在单线程环境中出现死锁:))。

      waitsFor = (fun, message = "waitsFor timeout!", timeout = 1000) ->  
        start = new Date().getTime()
        while true    
          if fun()
            break
          else if (new Date().getTime() - start) > timeout
            throw new Error(message)
    

    但是,也许以某种其他方式可以以某种其他简单的方式实现它,而不需要phantomjs和复杂的C-extensions等额外依赖?

1 个答案:

答案 0 :(得分:4)

您的应用程序应首先尝试异步连接到数据库,然后在连接可用时继续处理逻辑。例如:

db.connect(function(conn, err) {
  if (err) throw err;
  // Put your program logic using the db connection here...
});