Mongoose Connection best practice
There is often quite a lot of confusion about how best to set up a database connection with Mongoose. So I thought I'd clear it up!
There are two ways of establishing a Mongoose connection, using the default connection or a named connection. In this article we'll be looking at using the default connection.
Let's start with a list of things we want to achieve:
- Open the connection when the app starts
- Monitor the connection events
- Close the connection when the app process terminates
- Define a schema and build a model that we can use in the app
Defining the Node.js app
Let's define a really simple skeleton Node.js app, using the following file structure.
app.js
pages.js
model/
- db.js
- team.jsapp.js will be the starting point of the application, creating the server and tying everything together.
pages.js will contain a rudimentary controller to interact with Mongoose and display output to a browser window
model/db.js will hold the database connection and event listeners
model/team.js will hold a Mongoose schema definitionStarting with app.js, we need to require the HTTP module, the db file and the pages file. We'll also create a server that listens to the localhost port of 8888, serving an index page that we will define later in pages.js.
var http = require('http'),
db = require('./model/db'),
pages = require('./pages');
http.createServer(function (req, res) {
pages.index(req, res);
}).listen(8888, '127.0.0.1');
Managing the Mongoose connection
Our model/db.js file is where we'll hold the database connection information and event handlers. We'll also import our schemas & models into here so that the application has access to them. The comments in the code should make it pretty obvious what's going on here.
// Bring Mongoose into the app
var mongoose = require( 'mongoose' );
// Build the connection string
var dbURI = 'mongodb://localhost/ConnectionTest';
// Create the database connection
mongoose.connect(dbURI);
// CONNECTION EVENTS
// When successfully connected
mongoose.connection.on('connected', function () {
console.log('Mongoose default connection open to ' + dbURI);
});
// If the connection throws an error
mongoose.connection.on('error',function (err) {
console.log('Mongoose default connection error: ' + err);
});
// When the connection is disconnected
mongoose.connection.on('disconnected', function () {
console.log('Mongoose default connection disconnected');
});
// If the Node process ends, close the Mongoose connection
process.on('SIGINT', function() {
mongoose.connection.close(function () {
console.log('Mongoose default connection disconnected through app termination');
process.exit(0);
});
});
// BRING IN YOUR SCHEMAS & MODELS // For example
require('./../model/team');
Using the Mongoose connection
Finally, we want to do something with the connection. So in pages.js we want the following code. What we're going to do is require Mongoose, bring the Team model in, create a new team and output it to the browser window.
var mongoose = require( 'mongoose' ),
Team = mongoose.model('Team');
exports.index = function (req, res) {
Team.create({
Country : "England",
GroupName: "D",
CreatedOn: Date.now()
}, function(err, team) {
var strOutput;
res.writeHead(200, {
'Content-Type': 'text/plain'});
if (err) {
console.log(err);
strOutput = 'Oh dear, we\'ve got an error';
} else {
console.log('Team created: ' + team);
strOutput = team.Country + ' created in Group ' + team.GroupName + '\nat ' + team.CreatedOn;
}
res.write(strOutput);
res.end();
});
};
You'd normally want to separate this out into the component parts, the view and the controller, but we want to keep this example streamlined and focused.
Running the test page
Run this app by going to the root folder, install Mongoose into the app:
npm install mongoose
and run it:
node app
Finally, head to the browser and go to http://localhost:8888
So there we go. As you can see it's pretty straightforward to create a default Mongoose connection and use it in your application. You can test the disconnection script and event handler by terminating your Node process. In the terminal window running the Node app just hit Ctrl + C to kill the process.
From: http://theholmesoffice.com/mongoose-connection-best-practice/
Mongoose Connection best practice的更多相关文章
- 报错mongoose.connection.db.collectionnames is not a function
mongoose.connection.db.collectionNames方法已经无效 建议使用mongoose.connection.db.listCollections()
- mongoose中connect()、createConnection()和connection的区别和作用
转文:原文 1 mongoose简介 在使用mongodb数据库开发项目中,nodejs环境下可能会使用到mongoose模块连接并操作mongodb数据库.mongoose模块相当于Java中的数据 ...
- mongoose数据库连接和操作
var mongoose = require('mongoose') mongoose.connect('mongodb://localhost:27017/hometown'); var db = ...
- Nodejs之MEAN栈开发(三)---- 使用Mongoose创建模型及API
继续开扒我们的MEAN栈开发之路,前面两节我们学习了Express.Jade引擎并创建了几个静态页面,最后通过Heroku部署了应用. Nodejs之MEAN栈开发(一)---- 路由与控制器 Nod ...
- Mongoose学习笔记
#名词解释: Schema 一种以文件形式存储的数据库模型骨架,不具备对数据库操作的能力 Model 由Schema生成的模型,具有抽象属性和行为,能够操作数据库 Entity 由Model创建的实体 ...
- Node.js使用Mongoose包操作MongoDB数据库
1. 安装Mongoose npm install mongoose 2. 使用 2.1 创建连接 var mongoose = require('mongoose'); mongoose.conne ...
- Nodejs学习笔记(十四)— Mongoose介绍和入门
目录 简介 mongoose安装 连接字符串 Schema Model 常用数据库操作 插入 更新 删除 条件查询 数量查询 根据_id查询 模糊查询 分页查询 其它操作 写在之后... 简介 Mon ...
- mongoose 数据库操作 - 分页
使用mongoose 加入分页方法,临时还没发现什么更好的方法,我使用的方法是,直接在源代码中加入 找到 node_modules/mongoose/lib/model.js打开这个文件.里面加入这段 ...
- nodejs+mongoose操作mongodb副本集实例
继上一篇设置mongodb副本集之后,开始使用nodejs访问mongodb副本集: 1:创建项目 express 项目名称 2:npm install mongoose 安装mongo ...
随机推荐
- Android的设计尺寸
术语和概念 屏幕尺寸 指实际的物理尺寸,为屏幕对角线的测量.为了简单起见,Android把实际屏幕尺寸分为四个广义的大小:小,正常,大,特大. 像素(PX) 代表屏幕上一个物理的像素点代表屏幕上一个物 ...
- TC SRM600 DIV2
开始补TC. 目前才补完SRM600的DIV2. 题目:http://community.topcoder.com/tc?module=ProblemArchive 250: 很水,不解释,直接搞. ...
- STM32 Seminar 2007 -- Timer
- swap文件查看
建议 Swap 使用单独的分区: a swap file a combination of swap partitions and swap files. Swap 大小的计算公式: M 等于物理内存 ...
- Revit API判断直线相交关系移动风管
start ) ); )) )) ); XYZ xyz12 = lCurve1.Curve.get_EndPoint(); XY ...
- Complete uninstall on Mac, HELP!
Remove these directories: /Applications/Xamarin Studio.app /Developer/MonoTouch /Developer/MonoAndro ...
- Spring Boot 2.0 + zipkin 分布式跟踪系统快速入门
原文:https://www.jianshu.com/p/9bfe103418e2 注意 Spring Boot 2.0之后,使用EnableZipkinServer创建自定义的zipkin服务器已经 ...
- iOS中使用RegexKitLite来试用正则表达式
转:http://blog.csdn.net/nullcn/article/details/6338592 准备工作,下载RegexKitLite 软件包,解压后有2个文件,需要加载到project中 ...
- Quartz:不要重复造轮子,一款企业级任务调度框架。
背景 第一次遇到定时执行某些任务的需求时,很多朋友可能设计了一个小类库,这个类图提高了一个接口,然后由调度器调度所有注册的接口类型,我就是其中之一,随着接触的开源项目越来越多,我的某些开发习惯受到了影 ...
- idea jni
javah -jni -classpath (搜寻类目录) -d (输出目录) (类名) nm -D **.so idea setting $JDKPath$/bin/javah -jni -cla ...