继续开扒我们的MEAN栈开发之路,前面两节我们学习了Express、Jade引擎并创建了几个静态页面,最后通过Heroku部署了应用。

Nodejs之MEAN栈开发(一)---- 路由与控制器

Nodejs之MEAN栈开发(二)----视图与模型

这一节将重点介绍MongoDB以及它的ODM(Object-Document Modeler)Mongoose。MongoDB是一种分布式文档存储型数据库,和平时使用的关系型数据库不同,它存储的是BSON格式(json的二进制),特点是高性能、易部署,易使用...(详情请见百科),主要一点它支持JavaScript读写,MEAN栈开发的最大特点就是前后端包括数据库都是JavaScript编写。而Mongoose可以类比EntityFramwork(ORM-对象关系映射),主要做用是让开发人员可以更方便的操作数据库。在开始之前,记得先安装mongodb

一、MongoDB准备工作

1. mongo安装完之后,用cmd切到安装目录下面的bin目录。执行mongo,如果出现版本号则说明启动成功:

 Nodejs之MEAN栈开发(三)----  使用Mongoose创建模型及API

如果是出现“计算机积极拒绝”,需要设置下dbpath,也就是指定数据的路径。

mongod --dbpath=c:\mongodb\db

成功之后,可以访问http://localhost:28017/ ,可以看到如下页面:

Nodejs之MEAN栈开发(三)----  使用Mongoose创建模型及API

说明一切就绪。

2.为避免每次开机完都要设置dbpath,需要将mongo设置为服务启动。分两步,先用管理员身份打开cmd,切到mongo的bin目录:

D:\mongodb\bin>mongod --dbpath=D:\mongodb --logpath=D:\mongodb\log.txt --install

以上路径更换成自己的路径,然后在运行框中输入services.msc。设置服务的时候要确保mongo在运行状态,不然设置不会成功。

Nodejs之MEAN栈开发(三)----  使用Mongoose创建模型及API

打开文件,找到Mongo DB:

Nodejs之MEAN栈开发(三)----  使用Mongoose创建模型及API

右键选择启动,这样每次开机mongo就会自动运行。

3.更方便点,可以在桌面创建一个star.bat文件:

@echo off
start "" "D:\mongodb-win32-i386-2.0.6\bin\mongo.exe"

 这样每次点击直接进入命令框:

 Nodejs之MEAN栈开发(三)----  使用Mongoose创建模型及API

4.常用命令/基本操作 

查看db:

show dbs

切换到某个数据库:

switched to db dbname
或者:
use dbname

查看某个数据库下的集合

show collections

查看集合下面的文档:

db.collections.find()

 Nodejs之MEAN栈开发(三)----  使用Mongoose创建模型及API

因为这一节的重点不是要介绍如何在cmd中操作mongo,所以不再赘述了。更多这样的细节可以参考一线码农的博客:8天学通mongoDB。如果是没有安装sp1的电脑,官网的3.0版本安装成功后无法运行,可以用2.xx免安装版。接下来主要讲Mongoose的操作。

二、Mongoose

1.安装

你可以用npm直接安装:

Nodejs之MEAN栈开发(三)----  使用Mongoose创建模型及API

也可以用vs进行安装。右键工程上的npm,选择Install New npm Packages。

Nodejs之MEAN栈开发(三)----  使用Mongoose创建模型及API

第一次会下载安装一个工具,安装完成之后,搜索Mongoose,出现下面的界面,并安装。

Nodejs之MEAN栈开发(三)----  使用Mongoose创建模型及API

2.建立连接

到这一步环境终于是准备好了,接下来在app_server 文件夹下创建一个models目录,并新建一个db.js

Nodejs之MEAN栈开发(三)----  使用Mongoose创建模型及API

并在db.js中引用Mongoose:

var mongoose = require('mongoose');

mongodb不需要在连接它之前创建数据库,当第一次连接的时候,会根据链接自动创建。Mongoose在连接MongoDB的时候会创建一个有五个可重用的连接的连接池,连接数是可以配置的。这么做的原因是因为连接数据库是比较耗时的操作,特别是分布式的数据库。连接字符串的规则如下:

Nodejs之MEAN栈开发(三)----  使用Mongoose创建模型及API

这里用户名、密码、端口都是可以省略的,那么在本地的时候我们的连接字符串就如下:

var dbURI = 'mongodb://localhost/RClub';
mongoose.connect(dbURI);

命名我们的数据库为RClub。Mongoose会基于连接的状态发布不同的事件:

mongoose.connection.on('connected', function () {
    console.log('Mongoose connected to ' + dbURI);
});
mongoose.connection.on('error', function (err) {
    console.log('Mongoose connection error: ' + err);
});
mongoose.connection.on('disconnected', function () {
    console.log('Mongoose disconnected');
});

如此我们可以监听连接的状态。另外应用终止需要监听nodejs的进程的SIGINT事件。而如果是nodemon重启,需要监听的是SIGUSR2事件,以便关闭连接。

// 当应用重启或终止的时候 关闭连接
Shutdown = function (msg, callback) {
    mongoose.connection.close(function () {
        console.log('Mongoose disconnected through ' + msg);
        callback();
    });
};

// nodemon 重启 
process.once('SIGUSR2', function () {
    Shutdown('nodemon restart', function () {
        process.kill(process.pid, 'SIGUSR2');
    });
});

// 应用终止
process.on('SIGINT', function () {
    Shutdown('app termination', function () {
        process.exit(0);
    });
});
View Code

相关文章:

  • 2021-11-29
  • 2021-09-19
  • 2022-01-26
  • 2021-08-23
  • 2022-02-02
  • 2022-12-23
猜你喜欢
  • 2021-06-21
  • 2021-12-09
  • 2022-01-06
  • 2021-12-30
  • 2021-09-30
  • 2022-01-17
  • 2022-12-23
相关资源
相似解决方案