我对这两个节点都不熟悉。js和MongoDB,但我已经设法将SO和mongo的文档中的一些部分整合在一起。
Mongo documentetion给出了一个例子:
// Retrieve
var MongoClient = require('mongodb').MongoClient;
// Connect to the db
MongoClient.connect("mongodb://localhost:27017/exampleDb", function(err, db) {
if(!err) {
console.log("We are connected");
}
});
如果我只需要在一个地方的一个函数中使用数据库,这看起来很好。在SO上搜索和阅读表明,我不应该每次都打开一个新连接,而是使用一个池并重用我第一次得到的数据库对象。这个答案在SO上很丰富,但我不确定如何首先获取DB对象,然后如何重用它。
假设我的App.js中有上面的Node.js代码,然后我有不同的路由需要在数据库上运行不同的操作,例如:
app.post('/employee', function(req, res){
//Put req.name in database
});
app.post('/car', function(req, res){
//Put req.car in database
});
我该如何把这两个片段组合成有用的东西呢?
我在Node中发现了一个类似的问题。js重用MongoDB引用,但从外观来看(http://mongodb.github.io/node-mongodb-native/driver-articles/mongoclient.html)看起来我应该使用MongoClient而不是db()。我也不确定它是否能解决我的问题。。。
从上一段代码来看,您似乎在使用Express或类似的框架。您可以使用ExpressMongo db在req
对象内部建立连接。此中间件将为您缓存连接,并将其与其他传入请求共享:
app.use(require('express-mongo-db')(require('mongodb'), { db: 'test' }))
app.post('/employee', function(req, res){
// req.db.collection('names'),insert(req.name)
// Put req.name in database
});
app.post('/car', function(req, res){
// req.db.collection('names').insert(req.name)
// Put req.car in database
});
您可以编写一个模块来初始化数据库连接,并使它们在整个程序中都可以访问。例如:
蒙戈。js
var mongodb = require('mongodb');
module.exports.init = function (callback) {
var server = new mongodb.Server("127.0.0.1", 27017, {});
new mongodb.Db('test', server, {w: 1}).open(function (error, client) {
//export the client and maybe some collections as a shortcut
module.exports.client = client;
module.exports.myCollection = new mongodb.Collection(client, 'myCollection');
callback(error);
});
};
应用程序。js
var mongo = require('./mongo.js');
//setup express...
//initialize the db connection
mongo.init(function (error) {
if (error)
throw error;
app.listen(80); //database is initialized, ready to listen for connections
});
随机ile.js
var mongo = require('./mongo.js');
module.exports.doInsert = function () {
//use the collection object exported by mongo.js
mongo.myCollection.insert({test: 'obj'}, {safe:true}, function(err, objects) {
if (err)
console.warn(err.message);
});
};
我知道人们谈论池,但当我对池化mongo连接与所有请求的单个连接进行基准测试时,单个连接实际上表现得更好。诚然,这是大约一年前的事了,但我怀疑基本概念是否已经改变。所有的请求都是异步的,所以不需要多个连接才能同时发出请求。
至于MongoClient,我想这是他们鼓励的新语法。无论哪种方式,它本质上都是一个客户机对象,无论使用哪种样式,您都希望保留它并使其可访问。
问题内容: 以下代码使我在节点js中出现异常:“需要删除或更新” 由于我指定了更新操作,因此无法解决问题。 问题答案: 节点驱动程序中的语法与外壳程序中的语法不同,这是您使用的语法。 有一个单独的功能
我有两个表有下面的模式,我想从用户表中获取用户名和密码,从信息表中获取全名。 var infoSchema=mongoose.Schema({khatam_id:String,user_id:String,fullname:String,}); var usersSchema=mongoose.Schema({user\u id:String,username:String,password:St
我需要你的建议。 我想通过rest API(node.js)处理多个MongoDB数据库的服务器,并对它们进行管理。 如何管理我的数据库?当服务器启动不是一个好主意时,连接到所有数据库。连接数据库以在数据库中创建文档,然后断开连接听起来也不是个好主意。。。那我该怎么做呢?使用连接存储阵列,并在几分钟后断开连接?你怎么认为?
我做了一个卑鄙的计划。这个项目几天前成功运行。但突然间,它给了我们一个错误。我不会改变任何事。我使用mongo atlas。下面给出了错误描述。 错误MongoNetworkError:无法在第一次连接时连接到服务器[cluster0-shard-00-01-s9niu.mongodb.net:27017][MongoNetworkError:连接5到cluster0-shard-00-01-s9
我已经开始在一个简单的node.js应用程序中使用Q Promise包。所以我对如何在所有Promise序列完成后关闭数据库连接感兴趣。 例子: 我想在显示集合名称后关闭连接,但此匿名函数中没有db上下文。 有没有办法用promise模式处理此类案件?
我创建了一个小节点应用程序,从GitHub jobs API获取作业。我正在使用模块来完成此操作。您可以看到下面的代码: 如果您能帮助打印JSON对象,我将不胜感激,目前它只打印。