我正在尝试实现一个优雅的代码来解析与 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/
我的瘦服务器配置了nginx,我的ROR应用程序正在它们上运行。在我发布代码更新时运行thinrestart会给我的应用程序带来一些停机时间。我试图弄清楚如何优雅地重启正在运行的Thin实例,但找不到好的解决方案。有没有人能做到这一点? 最佳答案 #Restartjustthethinserverdescribedbythatconfigsudothin-C/etc/thin/mysite.ymlrestartNginx将继续运行并代理请求。如果您将Nginx设置为使用多个上游服务器,例如server{listen80;server
我正在使用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].有没有一种方法可以
我使用的是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上找到一个类
我克隆了一个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
如何将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.你能做的最好的事情是:
我对如何计算通过{%assignvar=0%}赋值的变量加一完全感到困惑。这应该是最简单的任务。到目前为止,这是我尝试过的:{%assignamount=0%}{%forvariantinproduct.variants%}{%assignamount=amount+1%}{%endfor%}Amount:{{amount}}结果总是0。也许我忽略了一些明显的东西。也许有更好的方法。我想要存档的只是获取运行的迭代次数。 最佳答案 因为{{incrementamount}}将输出您的变量值并且不会影响{%assign%}定义的变量,我
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
我遇到了一个非常奇怪的问题,我很难解决。在我看来,我有一个与data-remote="true"和data-method="delete"的链接。当我单击该链接时,我可以看到对我的Rails服务器的DELETE请求。返回的JS代码会更改此链接的属性,其中包括href和data-method。再次单击此链接后,我的服务器收到了对新href的请求,但使用的是旧的data-method,即使我已将其从DELETE到POST(它仍然发送一个DELETE请求)。但是,如果我刷新页面,HTML与"new"HTML相同(随返回的JS发生变化),但它实际上发送了正确的请求类型。这就是这个问题令我困惑的
考虑一下:现在这些情况:#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://
我有一个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