我知道有人问过类似的问题,但实际上没有人显示这样做的代码,他们只链接到同样不显示代码的页面。
总之,基本上,我的节点服务器接收socket.io事件上的数据。我希望这些数据进入MongoDB。问题是,我看到的所有mongo的代码示例都只使用db
对象在MongoClient.connect
回调中操作数据库。
因为,我会得到很多这样的数据,我不想一次又一次地初始化。
我需要的是有效的:
MongoClient.connect(("mongodb://" + process.env.IP + ":27017/feedback"),
function(err, db) { ... });
然后:
socket.on('data', function (data) {
db.doStuff();
});
MongoClient.connect()
返回一个promise如果你不给它回调,你可以声明一个全局promise:
var connect = MongoClient.connect(url);
socket.on('data', function(data) {
connect.then(function(db) {
});
});
socket.on('otherData', function(data) {
connect.then(function(db) {
});
});
您应该能够将连接加载到var中,并只使用它,而不是为每个查询重新建立连接。
我自己也使用类似的方法,将连接代码定位到自己的模块中,类似于
注意:此代码是即兴编写的,未经测试,我有点醉了。
connect.js
var MongoClient = require('mongodb').MongoClient;
module.exports = function(params) {
var ip = params.ip || process.env.IP;
var port = params.port || 27017;
var collection = params.collection;
var db = MongoClient.connect('mongodb://' + ip + ':' + port + '/' + collection);
return db;
}
然后,在你的应用程序中的任何其他模块中,你都需要connection.js
,并为任何给定的连接传递params
,比如:
onFeedback.js
var feedbackDB = require('./connection.js')({
collection : 'feedback'
});
socket.on('data', function (data) {
feedbackDB(function(db){
db.doStuff();
};
});