Подключение к базе данных в Node.JS - PullRequest
2 голосов
/ 10 января 2012

Для некоторых особых случаев, таких как 'require', имеет смысл блокировать выполнение, чтобы сделать вещи проще.

У меня похожий случай, мне нужен способ установить соединение с БД, заблокирован.И поскольку это происходит только один раз - когда приложение запускается и сохраняется в глобальном объекте для последующего повторного использования - это не повлияет на производительность.

Проблемы:

  1. узел не 'у него нет метода 'sleep'.
  2. есть некоторая хитрость с циклом обработки событий. Вы должны заблокировать его, но в то же время разрешить обрабатывать его соединения с базой данных.

На самом деле я уже сделал это, используя waitFor от jasmine-node, но когда я посмотрел на него source - он очень сложный и использует C-расширения phantomjs.

И, к сожалению, простые 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-расширений?

1 Ответ

4 голосов
/ 10 января 2012

Ваше приложение должно сначала попытаться подключиться к базе данных асинхронно, а затем перейти к ее логике обработки, когда соединение доступно.Например:

db.connect(function(conn, err) {
  if (err) throw err;
  // Put your program logic using the db connection here...
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...