什么'这是用express.js处理mongose连接的正确方法
What's the proper way to handle mongoose connections with express.js?
我尝试运行一个非常简单的"server.js"设置:
var express = require('express'),
wines = require('./routes/testscripts');
var app = express();
app.get('/first_test', wines.popSingleData);
app.listen(3000);
console.log('Listening on port 3000...');
设置为连接到localhost:3000
当我导航到localhost:3000/first_test
时,它调用testscript.js:中的"popSingleData"方法
...
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test');
var db = mongoose.connection;
console.log('include called');
exports.popSingleData = function(req, res) {
// var mongoose = require('mongoose');
// mongoose.connect('mongodb://localhost/test');
// var db = mongoose.connection;
console.log('function called');
db.on('error', console.error.bind(console, 'connection error:'));
console.log('error handler set');
db.once('open', function callback () {
//yay!
console.log("DB Opened");
var someSchema = require('../models/someSchema');
someSchema.find(function (err, found){
if (err)
{
console.log('err');
}
if(found.length != 0)
{
console.log("Found Data:");
console.log(found);
for( var i = 0; i < found.length; i++)
{
res.jsonp((found[i]));
}
}
});
});
};
...
引起问题的线路是前3:
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test');
var db = mongoose.connection;
当它们在函数中声明时,脚本会按预期运行,打印出它从数据库中找到的JSON对象。当它们在testscript.js中定义,但在方法的范围之外时,程序将挂起db.once('open', function callback () {...}); command
。
有人能解释一下移动这3行代码会产生什么不同吗?每次我想要一个不同的函数来访问数据库时,我真的需要建立一个新的连接吗?
如果已连接到数据库,则once
事件不会再次激发。当数据库全局连接(在函数之外)时,它已经为整个NodeJ进程连接。
对mongoose.connect('mongodb://localhost/test');
的调用建立连接并打开它。
因此,当NodeJs应用程序启动时,不要在每次函数调用时打开它(这将是一种与MongoDB交互的低效方式)connect
,并考虑到会有一段时间连接可能不可用(因为它是异步的),或者在连接完成(或超时)之前不要启动应用程序(listen
)。使用Mongoose,在建立连接之前,所有命令都会被缓冲(但这可能不是您想要的行为)。如果您想知道连接何时完成,可以使用open
事件。
如果使用connect
函数创建连接,则可以在此处找到连接:mongoose.connection
。
打开连接后,您可以从popSingleData
函数中使用它,而无需使用once
事件和回调。有一个自动维护的连接池。
有关连接的更多信息,请阅读此处。
- 是否可以将一个函数输入连接到另一个函数调用的文本
- 如何使用密码检测网络中的状态连接
- 如何处理node.js节点mongodb中的连接和查询队列
- Rails-JQueryUIAutcomplete和AJAX不工作,可以't连接到数据库
- Twilio-显示所有连接参与者的远程参与者视频
- 操作放置在画布上的元素之间的连接
- TypeError:_this.store.getState在使用来自Redux的连接时不是函数
- jQuery UI可排序-多连接列表拖动
- 如何使用offer/answer交换来自两个对等连接的流
- 在Qualtrics中,介绍如何动态连接两个滑块
- 使用优化器在慢速连接上加载main.js时需要js超时
- 如果连接类型为none,则Javascript Function Only警报
- GTK百老汇支持同时连接
- 在node.js中写入ECONNRESET错误和套接字连接检查
- 如何将所有JS文件连接到一个文件夹中
- 在cordova android应用程序中连接数据库
- Node.js上的WebSocket,并在所有连接的客户端之间共享消息
- 如何通过安全的https连接在javascript中使用基于soap xml的Web服务
- SignalR客户端启动连接时如何设置用户
- 什么'这是用express.js处理mongose连接的正确方法