本章主要講什么(一句話)坟桅?
《項(xiàng)目實(shí)戰(zhàn):基于Angular2+Mongodb+Node技術(shù)實(shí)現(xiàn)的多用戶博客系統(tǒng)教程(7)》
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?--? 引入MongoDB存儲數(shù)據(jù)
一舀瓢、前言
? ? ? 上一章主要對項(xiàng)目需求進(jìn)行了簡要分析镐侯,并對路由作了一框架規(guī)劃咏窿,本節(jié)繼續(xù)禁谦。
從本節(jié)起率寡,我們將設(shè)計(jì)數(shù)據(jù)的存儲層职烧,引入MongoDB數(shù)據(jù)存儲捧挺,這里我們即可以使用之前給大家介紹的Node下原生操縱MongoDB的接口方法虑绵,也可以使用mongoose這個(gè)第三方組件∶隼樱考慮到實(shí)際項(xiàng)目開發(fā)時(shí)翅睛,我們更常用的是使用第三方組件(避免重復(fù)造輪子)黑竞,這里我們給大家演示的是第二種方式來進(jìn)行MongoDB的數(shù)據(jù)操作(即采用mongoose組件)。
二很魂、mongodb node模塊基本配置
首先,node命令行工具遏匆,先定位到項(xiàng)目blog所在的目錄下法挨,然后給項(xiàng)目安裝mongodb支持模塊谁榜,命令如下:
cnpm? install? mongodb --save
PS: 加--save參數(shù)的目的是讓配置文件自動寫入package.json
接下來在工程的根目錄中創(chuàng)建 settings.js 文件凡纳,用于保存該博客工程的配置信息,比如數(shù)據(jù)庫的連接信息惫企。我們將數(shù)據(jù)庫命名為 blog撕瞧,因?yàn)閿?shù)據(jù)庫服務(wù)器在本地,所以 settings.js 文件的內(nèi)容如下:
module.exports = {
cookieSecret: 'myblog',
db: 'blog',
host: 'localhost',
port: 27017,
client:'http://localhost:3000'? //用于設(shè)置跨域
};
其中 db 是數(shù)據(jù)庫的名稱狞尔,host 是數(shù)據(jù)庫的地址,port是數(shù)據(jù)庫的端口號页畦,cookieSecret 用于 Cookie 加密與數(shù)據(jù)庫無關(guān)研儒,我們留作后用。client: 用于以后設(shè)置網(wǎng)站跨域Ajax調(diào)用好芭,這里你只需先照搬設(shè)置即可。
接下來在根目錄下新建 models 文件夾舍败,并在 models 文件夾下新建 mongodb.js 敬拓,添加如下代碼:
//引入mongoose
var mongoose = require('mongoose');
var settings = require("../settings");
//用戶模型
var UserModel;
//文章模型
var PostModel;
//連接數(shù)據(jù)庫
mongoose.connect('mongodb://'+settings.host+'/'+settings.db,
function(err){
if(err) {
console.err(err);
throw err;
}
});
//定義users-用戶文檔
var users = new mongoose.Schema({
name:String,
password:String,
email:String
});
//聲明一個(gè)User模型乘凸,使用它和數(shù)據(jù)庫交互
UserModel = mongoose.model('users',users);
//定義posts-文章模型
var posts = new mongoose.Schema({
name: String,
time: new mongoose.Schema({
date: Date,
year:Number,
month:String,
day:String,
minute:String
}),
title: String,
post: String
});
//聲明一個(gè)Posts模型,使用它和數(shù)據(jù)庫交互
PostModel = mongoose.model('posts',posts);
module.exports? = {"Users":UserModel,"Posts":PostModel};
代碼說明如下:
1.? var mongoose = require('mongoose');
引入mongoose第三方組件灵嫌,在此之前葛作,需要先本地下載mongoose第三方包:
node命令行工具,先定位到項(xiàng)目blog所在的目錄下进鸠,然后給項(xiàng)目安裝mongodb支持模塊客年,命令如下:
cnpm? install? mongodb --save
PS: 加"--save"參數(shù)的目的是讓配置文件自動寫入package.json
2. var settings = require("../settings");
導(dǎo)入setting配置文件,后面會配置數(shù)據(jù)庫連結(jié)要用
3. var UserModel; ? ??var PostModel;
分別定義系統(tǒng)中將來需要用到的“ 用戶模型” 和 “文章模型” ?量瓜,這里的模板绍傲,你可以理解為將來用于操作數(shù)據(jù)庫的ORM映射,即烫饼,將來通過他們以面向?qū)ο蟮姆绞絹聿僮鲾?shù)據(jù)庫。后面有對他們的創(chuàng)建代碼荠耽。
4.?mongoose.connect('mongodb://'+settings.host+'/'+settings.db,
function(err){
if(err) {
console.err(err);
throw err;
}
});
操作數(shù)據(jù)庫之前比藻,必須先連結(jié)數(shù)據(jù)庫。此步操作即是連結(jié)數(shù)據(jù)庫操作慢叨。語法是:
mongoose.connect(‘?dāng)?shù)據(jù)庫連結(jié)字符串',callback回調(diào)函數(shù))
數(shù)據(jù)庫連結(jié)字符串格式:
"mongodb://連結(jié)數(shù)據(jù)庫所在服務(wù)器IP(端口號可省)/數(shù)據(jù)庫" , 本系統(tǒng)中實(shí)際的數(shù)據(jù)庫連結(jié)字符串為:
mongodb://localhost/blog
5.?var users = new mongoose.Schema({
name:String,
password:String,
email:String
});
這里我們通過new mongoose.Schema的方法定義users-用戶文檔务蝠,相當(dāng)于為MongoDB自動創(chuàng)建一個(gè)文檔(表)結(jié)構(gòu),三個(gè)字段分別為:name: String? ;//用戶名赠尾,password:String; //密碼 , email:String; //Email
UserModel = mongoose.model('users',users);
這里聲明一個(gè)User模型毅弧,使用它和數(shù)據(jù)庫交互,相當(dāng)于創(chuàng)建一個(gè)用戶文檔(用戶表)寸宵,名為“users",文檔(表)結(jié)構(gòu)為上述的users所對應(yīng)的字段類型元咙。
6.var posts = new mongoose.Schema({
name: String,
time: new mongoose.Schema({
date: Date,
year:Number,
month:String,
day:String,
minute:String
}),
title: String,
post: String
});
這里我們通過new mongoose.Schema的方法定義定義posts-文章模型,相當(dāng)于為MongoDB自動創(chuàng)建一個(gè)文檔(表)結(jié)構(gòu)甲棍,三個(gè)字段分別為:name: String? ;//用戶名赶掖,time:內(nèi)嵌一新的數(shù)據(jù)類型;? , title:String; //發(fā)表的文章標(biāo)題 七扰, post: String //發(fā)表的文章內(nèi)容
PS:需特別說明是:time: new mongoose.Schema({
date: Date,
year:Number,
month:String,
day:String,
minute:String
}), ?這段代碼給我們示例了如何自定義一復(fù)雜數(shù)據(jù)文檔類型
PostModel = mongoose.model('posts',posts);
//聲明一個(gè)Posts模型陪白,使用它和數(shù)據(jù)庫交互,相當(dāng)于創(chuàng)建一個(gè)文章文檔(文章表)立由,名為“posts",文檔(表)結(jié)構(gòu)為上述的posts所對應(yīng)的字段類型序厉。
7.module.exports? = {"Users":UserModel,"Posts":PostModel};
把 Users用戶模型 和Posts文章模型 對外以接口方式導(dǎo)出兩個(gè)實(shí)例,供外部調(diào)用枣耀!
三庭再、后述
本章代碼下載:http://pan.baidu.com/s/1qYJGlDa
下章劇透:
《項(xiàng)目實(shí)戰(zhàn):基于Angular2+Mongodb+Node技術(shù)實(shí)現(xiàn)的多用戶博客系統(tǒng)教程(8)》
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? --? 利用mongoose第三方庫進(jìn)行業(yè)務(wù)數(shù)據(jù)操作
? ? 代碼進(jìn)行到這里拄轻,就先告一段落了。本章的核心代碼在于【mongoose的數(shù)據(jù)庫連結(jié)及模型創(chuàng)建配置】恨搓,還沒有完,更加精彩的mongoose操作數(shù)據(jù)庫代碼下篇繼續(xù)常拓。另外需要說明的是辉浦,關(guān)于mongoose庫的用法,我不打算一一對其API作解釋掂恕,因?yàn)榫W(wǎng)上的文章很多弛槐,這里即然是原創(chuàng),就盡量想寫一些網(wǎng)上沒有的店枣,故更多的會提供實(shí)戰(zhàn)操作代碼,大家將來可以直接借鑒到你的實(shí)際項(xiàng)目中鸯两,如想對mongoose庫更深入的了解,可以自行百度【mongoose使用詳解】,這里就不再累述逾柿。