項(xiàng)目實(shí)戰(zhàn)(連載):基于Angular2+Mongodb+Node技術(shù)實(shí)現(xiàn)的多用戶博客系統(tǒng)教程(7)

本章主要講什么(一句話)坟桅?

《項(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使用詳解】,這里就不再累述逾柿。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末宅此,一起剝皮案震驚了整個(gè)濱河市父腕,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌璧亮,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,627評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件帘饶,死亡現(xiàn)場離奇詭異群扶,居然都是意外死亡竞阐,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,180評論 3 399
  • 文/潘曉璐 我一進(jìn)店門颗搂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來汪疮,“玉大人,你說我怎么就攤上這事卖丸。” “怎么了稍浆?”我有些...
    開封第一講書人閱讀 169,346評論 0 362
  • 文/不壞的土叔 我叫張陵衅枫,是天一觀的道長。 經(jīng)常有香客問我弦撩,道長,這世上最難降的妖魔是什么猾漫? 我笑而不...
    開封第一講書人閱讀 60,097評論 1 300
  • 正文 為了忘掉前任悯周,我火速辦了婚禮陪竿,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘族跛。我一直安慰自己,他們只是感情好解总,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,100評論 6 398
  • 文/花漫 我一把揭開白布姐仅。 她就那樣靜靜地躺著,像睡著了一般劳翰。 火紅的嫁衣襯著肌膚如雪馒疹。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,696評論 1 312
  • 那天生均,我揣著相機(jī)與錄音腥刹,去河邊找鬼。 笑死佩脊,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的威彰。 我是一名探鬼主播,決...
    沈念sama閱讀 41,165評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼舔痕,長吁一口氣:“原來是場噩夢啊……” “哼赵讯!你這毒婦竟也來了耿眉?” 一聲冷哼從身側(cè)響起鱼响,我...
    開封第一講書人閱讀 40,108評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎筐骇,沒想到半個(gè)月后江滨,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,646評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡告唆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,709評論 3 342
  • 正文 我和宋清朗相戀三年擒悬,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了稻艰。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,861評論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡僧凤,死狀恐怖元扔,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情摇展,我是刑警寧澤溺忧,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布鲁森,位于F島的核電站振惰,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏骑晶。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,196評論 3 336
  • 文/蒙蒙 一匙头、第九天 我趴在偏房一處隱蔽的房頂上張望仔雷。 院中可真熱鬧,春花似錦电抚、人聲如沸竖共。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,698評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽淌铐。三九已至,卻和暖如春狰挡,著一層夾襖步出監(jiān)牢的瞬間释涛,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,804評論 1 274
  • 我被黑心中介騙來泰國打工它匕, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留窖认,地道東北人告希。 一個(gè)月前我還...
    沈念sama閱讀 49,287評論 3 379
  • 正文 我出身青樓烧给,卻偏偏與公主長得像,于是被迫代替她去往敵國和親指么。 傳聞我的和親對象是個(gè)殘疾皇子榴鼎,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,860評論 2 361

推薦閱讀更多精彩內(nèi)容