β

Mongoose&KOA使用入门

一、概念解析:

Mongoose:

Let’s face it, writing MongoDB validation, casting and business logic boilerplate is a drag . That’s why we wrote Mongoose.

Mongoose简单来说就是数据库操作ORM

createConnection 与 connect:

许多入门学徒在看到这两个函数的时候都会有一定疑惑,但是这两个函数其实并不是一个东西,

createConnection 创建的并非一个默认的数据库连接,它返回的是一个Connection。我们需要通过这个Connection来创建Model、Instance,然后进行数据表操作,这通常是在程序需要连接多个数据库的情况下使用,否则一般使用connect来打开默认的数据库连接,这时候我们就可以用mongoose.model来创建我们的Model了。

Crayon Syntax Highlighter v2.7.1
1
2
3
4
5
var conn = mongoose.createConnection('mongodb://localhost:27017/test'),
MyModel = conn.model('project', projectSchema),
m = new MyModel;
m.save();
[Format Time: 0.0013 seconds]

VS

Crayon Syntax Highlighter v2.7.1
1
2
3
4
5
var conn = mongoose.connect('mongodb://localhost:27017/test'),
MyModel = mongoose.model('project', projectSchema),
m = new MyModel;
m.save();
[Format Time: 0.0012 seconds]

必解名词:

Schema : 数据库存储格式的约定协议,可以理解为数据表的字段类型声明。

Model :  由Schema转化的数据模型,具有抽象属性和行为的数据库操作,可以进行查询操作

Instance: 由Model创建的实体操作对象,可以对数据库表进行完整的CRUD操作

二、Mongoose 使用

  1. 安装mongoose
Crayon Syntax Highlighter v2.7.1
1
$ npm install mongoose
[Format Time: 0.0003 seconds]
  1. 连接数据库
Crayon Syntax Highlighter v2.7.1
1
2
3
4
var mongoose = require('mongoose'),
url = 'mongodb://' + dbHost + ':' + dbPort + '/' + dbName;
mongoose.connect(url);
//mongoose.connect('mongodb://localhost:port/databaseName');
[Format Time: 0.0012 seconds]
  1. 声明一个Schema模型
Crayon Syntax Highlighter v2.7.1
1
2
3
4
5
6
7
8
9
10
11
12
13
var Schema = mongoose.Schema,
ObjectId = Schema.Types.ObjectId;
// 用户模型
var userSchema = new Schema({
uid: String, // 用户 id
nick: String, // 用户昵称
pwd: String, // 用户密码
project: [{
type: ObjectId,
ref: 'Project'
}] // 这个用户对应的作品
});
[Format Time: 0.0021 seconds]
  1. 将声明的Schema转化为Model
Crayon Syntax Highlighter v2.7.1
1
2
// 建立Model
var User = mongoose.model('User', userSchema);
[Format Time: 0.0005 seconds]
  1. 将Model实例化为Instance
Crayon Syntax Highlighter v2.7.1
1
2
3
4
5
6
var user = {
uid: '545183867',
nick: '哈哈哈'
};
var newUser = new User(user);
console.log(newUser.nick);
[Format Time: 0.0012 seconds]
  1. Instance 进行数据库CRUD操作
Crayon Syntax Highlighter v2.7.1
1
newUser.save(); // 执行完成后,数据库就有该数据了
[Format Time: 0.0004 seconds]
  1. 使用Modal进行表查询操作
Crayon Syntax Highlighter v2.7.1
1
2
3
User.find(function(err, users) {
//查询到的所有User
});
[Format Time: 0.0006 seconds]

三、结合KOA框架

在KOA中,回调已经基本被抛弃了,所以我们还是来看下KOA中mongoose活得怎么样吧。

CRUD操作如今需要加入yield 来确保我们主调调能耐心等待newUser.save()/User.find()的完成,那我们就去掉回调加上yield吧:

Crayon Syntax Highlighter v2.7.1
1
2
3
4
5
6
7
8
9
10
11
var user = {
uid: '545183867',
nick: '哈哈哈'
},
newUser = new User(user),
userInfo;
yield newUser.save();
userInfo = yield User.find({
uid: '545183867'
});
[Format Time: 0.0016 seconds]

既然没了错误处理,那么我们以回调实现的错误上报怎么办呢?别忘了,我们还有try catch,好了,套上他们就可以完成错误捕获了:

Crayon Syntax Highlighter v2.7.1
1
2
3
4
5
6
7
8
try {
this.data = yield User.find({
uid: '545183867'
});
} catch (e) {
console.log(e);
}
[Format Time: 0.0012 seconds]

以上是Mongoose与KOA框架结合的一个简单入门,因为时间关系就只介绍到这里了,希望能对mongoose新手有所帮助。

作者:Web前端 腾讯AlloyTeam Blog | 愿景: 成为地球卓越的Web团队!
腾讯全端 AlloyTeam 团队 Blog
原文地址:Mongoose&KOA使用入门, 感谢原作者分享。

发表评论