我知道已经提出了类似的问题,但实际上没有人显示执行此操作的代码,它们只链接到也不显示代码的页面。
无论如何,基本上我的节点服务器在socket.io事件上接收数据。我希望这些数据进入MongoDB。问题是我在mongo上看到的所有代码示例都只使用MongoClient.connect
对象来操纵db
回调中的数据库。
因为,我将获得大量这些数据,我不想一遍又一遍地初始化。
我需要的是这个:
MongoClient.connect(("mongodb://" + process.env.IP + ":27017/feedback"),
function(err, db) { ... });
然后是:
socket.on('data', function (data) {
db.doStuff();
});
答案 0 :(得分:6)
MongoClient.connect()
如果你不给它一个回调就返回一个承诺,你可以声明一个全球承诺:
var connect = MongoClient.connect(url);
socket.on('data', function(data) {
connect.then(function(db) {
});
});
socket.on('otherData', function(data) {
connect.then(function(db) {
});
});
答案 1 :(得分:1)
您应该能够将连接加载到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();
};
});