草庐IT

javascript - Node + MongoDB - 连接池 - mongoldb-native

coder 2023-11-06 原文

我正在尝试实现一个优雅的代码来解析与 node-mongoldb-native 的连接池。但是,我没有成功为此做一个模块。我确定那是关于提升的东西,但我无法理解。

Mongodb.js

'use strict';

var client = require('mongodb').MongoClient;
var connectionString = undefined;
var db = undefined;

switch(process.env.NODE_ENV) {
  case 'production':
    connectionString = process.env.MONGOLAB_URI;
    break;
  case 'test':
    connectionString = 'mongodb://localhost:27017/test';
    break;
  default:
    connectionString = 'mongodb://localhost:27017/development';
  }

client.connect(connectionString, function(err, database) {
  if (err) throw err;

  console.log('MongoDB running on ' + (process.env.NODE_ENV || 'development') + ' environment');

  database.on('error', function(err) {
    throw err;
  });

  db = database;
});

module.exports = db;  

App.js

var express = require('express');
var app = express();

var db = require('./lib/mongodb');

var professional = require('./routes/professional');

app.use('/professional', professional);

db.listCollections().toArray()
.then(function(items) { 
 console.log(items);
});

module.exports = app;     

控制台

Julios-MacBook-Air:klou juliocoelho$ ./bin/www 
/Users/juliocoelho/Projects/klou/app.js:10
db.listCollections().toArray()
  ^

TypeError: Cannot read property 'listCollections' of undefined
    at Object.<anonymous> (/Users/juliocoelho/Projects/klou/app.js:10:3)
    at Module._compile (module.js:435:26)
    at Object.Module._extensions..js (module.js:442:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:311:12)
    at Module.require (module.js:366:17)
    at require (module.js:385:17)
    at Object.<anonymous> (/Users/juliocoelho/Projects/klou/bin/www:3:11)
    at Module._compile (module.js:435:26)
    at Object.Module._extensions..js (module.js:442:10)

最佳答案

由于node.js的异步特性,需要导出一个回调赋值方法来获取变量,在异步执行时调用。下面的代码更好地解释了它:

'use strict';

var client = require('mongodb').MongoClient;
var connectionString = undefined;
var db, callback;

switch(process.env.NODE_ENV) {
    case 'production':
        connectionString = process.env.MONGOLAB_URI;
        break;
    case 'test':
        connectionString = 'mongodb://localhost:27017/test';
        break;
    default:
        connectionString = 'mongodb://localhost:27017/development';
}

client.connect(connectionString, function(err, database) {
    if (err) throw err;

    console.log('MongoDB running on ' + (process.env.NODE_ENV || 'development') + ' environment');

    database.on('error', function(err) {
        throw err;
    });
    db = database;
    if( typeof callback == 'function' ){
        callback(db);
    }
});


module.exports = function(cb){
    if(typeof db != 'undefined'){
        cb(foo); // If db is already defined, don't wait.
    } else {
        callback = cb;
    }
}

App.js

var dbModule = require('./lib/mongodb');
dbModule(function(db){
    //Here code using db;
    db.listCollections()
        .toArray()
        .then(function(items) { 
            console.log(items);
        });
});

关于javascript - Node + MongoDB - 连接池 - mongoldb-native,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33422788/

有关javascript - Node + MongoDB - 连接池 - mongoldb-native的更多相关文章

  1. ruby-on-rails - 如何优雅地重启 thin + nginx? - 2

    我的瘦服务器配置了nginx,我的ROR应用程序正在它们上运行。在我发布代码更新时运行thinrestart会给我的应用程序带来一些停机时间。我试图弄清楚如何优雅地重启正在运行的Thin实例,但找不到好的解决方案。有没有人能做到这一点? 最佳答案 #Restartjustthethinserverdescribedbythatconfigsudothin-C/etc/thin/mysite.ymlrestartNginx将继续运行并代理请求。如果您将Nginx设置为使用多个上游服务器,例如server{listen80;server

  2. ruby - 续集在添加关联时访问many_to_many连接表 - 2

    我正在使用Sequel构建一个愿望list系统。我有一个wishlists和itemstable和一个items_wishlists连接表(该名称是续集选择的名称)。items_wishlists表还有一个用于facebookid的额外列(因此我可以存储opengraph操作),这是一个NOTNULL列。我还有Wishlist和Item具有续集many_to_many关联的模型已建立。Wishlist类也有:selectmany_to_many关联的选项设置为select:[:items.*,:items_wishlists__facebook_action_id].有没有一种方法可以

  3. ruby - 无法在 60 秒内获得稳定的 Firefox 连接 (127.0.0.1 :7055) - 2

    我使用的是Firefox版本36.0.1和Selenium-Webdrivergem版本2.45.0。我能够创建Firefox实例,但无法使用脚本继续进行进一步的操作无法在60秒内获得稳定的Firefox连接(127.0.0.1:7055)错误。有人能帮帮我吗? 最佳答案 我遇到了同样的问题。降级到firefoxv33后一切正常。您可以找到旧版本here 关于ruby-无法在60秒内获得稳定的Firefox连接(127.0.0.1:7055),我们在StackOverflow上找到一个类

  4. ruby-on-rails - 错误 : Error installing pg: ERROR: Failed to build gem native extension - 2

    我克隆了一个rails仓库,我现在正尝试捆绑安装背景:OSXElCapitanruby2.2.3p173(2015-08-18修订版51636)[x86_64-darwin15]rails-v在您的Gemfile中列出的或native可用的任何gem源中找不到gem'pg(>=0)ruby​​'。运行bundleinstall以安装缺少的gem。bundleinstallFetchinggemmetadatafromhttps://rubygems.org/............Fetchingversionmetadatafromhttps://rubygems.org/...Fe

  5. ruby - 使用 `+=` 和 `send` 方法 - 2

    如何将send与+=一起使用?a=20;a.send"+=",10undefinedmethod`+='for20:Fixnuma=20;a+=10=>30 最佳答案 恐怕你不能。+=不是方法,而是语法糖。参见http://www.ruby-doc.org/docs/ProgrammingRuby/html/tut_expressions.html它说Incommonwithmanyotherlanguages,Rubyhasasyntacticshortcut:a=a+2maybewrittenasa+=2.你能做的最好的事情是:

  6. ruby - 如何计算 Liquid 中的变量 +1 - 2

    我对如何计算通过{%assignvar=0%}赋值的变量加一完全感到困惑。这应该是最简单的任务。到目前为止,这是我尝试过的:{%assignamount=0%}{%forvariantinproduct.variants%}{%assignamount=amount+1%}{%endfor%}Amount:{{amount}}结果总是0。也许我忽略了一些明显的东西。也许有更好的方法。我想要存档的只是获取运行的迭代次数。 最佳答案 因为{{incrementamount}}将输出您的变量值并且不会影响{%assign%}定义的变量,我

  7. ruby - 我的 Ruby IRC 机器人没有连接到 IRC 服务器。我究竟做错了什么? - 2

    require"socket"server="irc.rizon.net"port="6667"nick="RubyIRCBot"channel="#0x40"s=TCPSocket.open(server,port)s.print("USERTesting",0)s.print("NICK#{nick}",0)s.print("JOIN#{channel}",0)这个IRC机器人没有连接到IRC服务器,我做错了什么? 最佳答案 失败并显示此消息::irc.shakeababy.net461*USER:Notenoughparame

  8. ruby-on-rails - 使用 javascript 更改数据方法不会更改 ajax 调用用户的什么方法? - 2

    我遇到了一个非常奇怪的问题,我很难解决。在我看来,我有一个与data-remote="true"和data-method="delete"的链接。当我单击该链接时,我可以看到对我的Rails服务器的DELETE请求。返回的JS代码会更改此链接的属性,其中包括href和data-method。再次单击此链接后,我的服务器收到了对新href的请求,但使用的是旧的data-method,即使我已将其从DELETE到POST(它仍然发送一个DELETE请求)。但是,如果我刷新页面,HTML与"new"HTML相同(随返回的JS发生变化),但它实际上发送了正确的请求类型。这就是这个问题令我困惑的

  9. ruby-on-rails - 连接字符串时如何在 <%=%> block 内输出 html_safe? - 2

    考虑一下:现在这些情况:#output:http://domain.com/?foo=1&bar=2#output:http://domain.com/?foo=1&bar=2#output:http://domain.com/?foo=1&bar=2#output:http://domain.com/?foo=1&bar=2我需要用其他字符串输出URL。我如何保证&符号不会被转义?由于我无法控制的原因,我无法发送&。求助!把我的头发拉到这里:\编辑:为了澄清,我实际上有一个像这样的数组:@images=[{:id=>"fooid",:url=>"http://

  10. ruby - Faye WebSocket,关闭处理程序被触发后重新连接到套接字 - 2

    我有一个super简单的脚本,它几乎包含了FayeWebSocketGitHub页面上用于处理关闭连接的内容:ws=Faye::WebSocket::Client.new(url,nil,:headers=>headers)ws.on:opendo|event|p[:open]#sendpingcommand#sendtestcommand#ws.send({command:'test'}.to_json)endws.on:messagedo|event|#hereistheentrypointfordatacomingfromtheserver.pJSON.parse(event.d

随机推荐