2019-9-20 本週學習知識總結
這周主要學習node.js中express框架,以及mongodb非關係型數據庫,最後主要學習了node模塊mongoose用來操作mongodb數據庫。
第一部分 mongodb 數據庫的學習
1.mongodb的下載
訪問mongodb官網下載mongodb。
可以同時下載mongonvue,作爲一個mongodb的可視化界面,可以讓我們不用在dos命令框中操作數據庫。
2.mongodb數據庫的配置
1)爲了可以在全局使用mongodb,所以要設置環境變量,找到mongodb的安裝位置,添加到環境變量。
eg: 我的mongodb安裝位置爲:D:\mongoDB\mongoDB\mongodb-win32-x86_64-2008plus-ssl-4.0.11\bin
只需要找到環境變量將該地址添加到環境變量path中,這樣mongo命令就可以全局執行。
2)創建文件夾 mongodb,(創建在非系統盤,本人在d盤中)創建兩個子文件夾 db 和 log,用來保存新的數據庫,和緩存數據。
3)以管理員身份運行cmd,注意去c盤system32中找到cmd。右鍵單擊點擊以管理員身份運行。將mongodb掛在爲windows服務。
執行以下命令:
我創建的mongodb文件夾在d盤下,所以db子文件夾在d:mongodb\db
log子文件夾:d:mongodb\log\MonDB.log(mongodb.log會自動創建,不用我們手動創建)
所以我執行的命令爲:->mongo -- dbpath "d:mongodb\db" --logpath "d:mongodb\log\MonDB.log" --install --serviceName "MongoDB"
命令你數據庫存放的位置和日誌存放的位置,這個不會的建議百度。
4)這時候基本安裝完畢,不會的同學可以百度也可以評論。現在去cmd下執行 mongo
出現:
MongoDB shell version v4.2.0
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { “id” : UUID(“96e58f01-3679-49ca-b466-ca5f7bf03d8c”) }
MongoDB server version: 4.2.0
則說明安裝成功。
4.mongodb數據庫的一些基本命令
1.啓動和關閉mongodb數據庫(在管理員模式下運行cmd)
啓動: net start mongodb
關閉: net stop mongodb
2.進入數據庫
在命令行中運行:mongo 進入數據庫管理模式
在數據庫管理模式中,只能執行數據庫命令,不能執行其他命令
exit 推出數據庫管理模式
3.數據庫的基本操作:
首先了解數據庫組成: 數據庫名稱 下會有數據庫集合, 集合下爲數據:
這裏假設數據庫爲:news
news下有集合:list
list有數據
首先我們可以查看所有的數據庫:
命令:show dbs
進入一個數據庫:
命令:use + 數據庫名
eg:use news
(如果該集合存在那麼回進入集合,如果不存在,那麼就會新建這個集合);
查看該數據庫下的集合:
命令:show collections
查看當前的數據庫名字:
命令:db
創建集合:db.集合名.insert (可以在我們添加數據是直接自動生成新的集合)
刪除集合:db.集合名.drop
注意:重中之重: 現有數據庫,纔會有集合,纔會有文檔(大家疑問:創建了數據庫,show dbs 缺沒有我創建的數據庫,這是因爲數據庫中沒有內內容,所以接下來我們說數據庫的增刪改查)
數據庫的增刪改查:
a.新增數據(還有save方式大家可以去了解下(不常用))
db.集合名.insert({json形式})
eg: db.list.insert({name:"tomcat"});
出現: WriteResult({ "nInserted" : 1 }) 則表明插入成功
b.查看數據
db.集合名.find();
eg:db.list.find(); // 沒有格式的數據
db.list.find().pretty(); //格式比較好的數據
c.數據修改
db.集合名.update({}); //前面是通過條件查找到數據
eg:db.list.update(name:"tomcat",name:"jerry"); // 查找name爲tomcat的數據,修改爲jerry
只修改一條數據:
eg:db.list.update(name:"tomcat",{$set{name:"jerry"}});
d.數據的刪除
db.集合名.remove({});
eg:db.list.remove({}) 全部刪除 可以通過id值刪除一條數據
mongodb還有好多高級命令大家去百度查找然後學習吧
mongoose操作mongodb數據庫(重點)
1.什麼是mongoose?
mongoose是node.js的一個第三方模塊,是node.js一部環境下對mongodb進行便捷操作的對象模型工具。
可以對mongodb進行數據的增刪改查等方法。
2.mongoose的安裝和使用
cnpm install mongoose //需要安裝cnpm cnpm是淘寶鏡像npm,快速,便捷
3.express創建一個小的項目
express -e app (添加路由,創建項目等我想大家檸檬找到這應該都掌握了就不多闡述了,直接進入正題)
1.連接數據庫:
語法: mongoose.connect("momgodb://服務器:端口號/數據庫名",回調函數);
eg:
mongoose.connect("mongodb://127.0.0.1/news",{useNewUrlParser:true,useUnifiedTopology:true},function(err,data){
if(err){
throw err}else{
console.log("數據庫連接成功")}}); 地址爲本機地址。後面爲你要鏈接的數據庫名
2.數據庫骨架的定義:
定義骨架Scheme:
概念:scheme 是一種以文件形式存儲的數據庫模型骨架,不具備數據庫的操作能力
語法: new mongoose.Schema({
字段名:類型,
字段名:類型
})
eg:定義了數據庫中數據的類型,便於後期添加和修改數據
var listSchema = new mongoose.Schema({
title:String,
author:String,
laiyuan:String,
content:String,
time:String,
hits:Number
});
3.創建模型
創建模型model(用來讀取數據):
根據骨架來創建模型:
概述: 具備數據庫操作的能力,通常用來讀取數據庫
var boyModel = mongoose.model("模型名稱","骨架","集合名稱");
// 注意 : 模型名稱一般和 集合名稱相同
eg:
var newsModel = new mongoose.model("list",listSchema,"list");
4.創建實體
依賴於模型創建實體(增刪查改的操作要依賴於實體):
Entity是一種根據模型創建出一個實例,具備數據庫操作的能力,通常用於寫數據
(新增,修改,刪除)。
var boy = new boyModel();
//boy.屬性名 = 值:
singer.save(); //將添加到實體的屬性保存到數據庫中
singer.remove(); // 刪除數據
之後是我根據mongodb + mongoose + express 製作的一個小的新聞系統,基本實現了數據庫的增刪查改以及express模塊中路由的使用的而熟悉。
這是我的需求文檔:
需求:製作一個基於後端模板的新聞發佈系統
功能:
1.允許用戶發佈新聞
2.允許用戶查看新聞(可以在首頁瀏覽到最新的新聞)
3.允許用戶操作刪除新聞
4.允許用戶操作修改新聞
1.設計好數據庫,和數據的存儲結構
數據庫名: news
集合: list
文檔結構(骨架):
標題(title):string
作者(author):string
來源(from):string
內容(content):string
時間(time):string
點擊率(hits):number
第一部分 環境搭建
1.搭建express項目
1)創建項目 express - e + 項目名稱
2)安裝依賴 cnpm install
3)監聽端口 app.listen(2019)
4)運行項目
5)測試項目 手動打開瀏覽器 輸入網址: localhost
2.配置mongoose
1)連接數據庫
mongoose.connect("mongodb://127.0.0.1/news",{},function(err){
if(err){
throw err;
}else{
console.log("數據庫連接成功");
}
})
2)定義骨架
var listSchema = new mongoose.Schema({
title:String,
author:String,
from:String,
content:String,
time:String,
hits:Number
})
3)創建模型
var listModel = mongoose.model("list",listSchema,"list");
第一部分 ok
第二部分 實現功能
功能實現
1.允許用戶發佈新聞
1)製作一個添加新聞的靜態頁面
從resource 目錄中將newsadd.html 複製到public靜態目錄下
修改靜態代碼,修改from扁擔指向/save_add.html,定義所有輸入框的名稱
(save_add.html) 要作爲一個動態頁面來接收數據
2)製作一個save_add.html 動態頁面,保存到數據庫中,提示用戶結果
a.根目錄下的請求找index.js模塊中掛載新路由save_add.html(post方式)
3)將數據添加到數據庫
var list = new listModel();
list.屬性名 = value;
list.save(function(){});
over! 撒花慶祝 哈哈哈
2.
2.允許用戶查看新聞(可以在首頁瀏覽到最新的新聞)
1)先製作一個新聞列表的後端模板
從resource目錄中複製newslist.html 到views/newslist.ejs
將原有的測試數據刪除
添加for循環模板語法
3.
3.允許用戶操作刪除新聞
1)找到刪除鏈接的位置,添加a標籤連接,指向刪除功能的路由
(newslist.ejs)的模板哩
添加a標籤連接,加鏈接指向刪除功能的路由 /del.html ? id =
2)編寫路由實現功能
在router上掛載一個刪除新聞的路由 /del.html
接收id值,作爲被刪除的數據標識
根據id查找到數據實體
data.remove()調用方法實現刪除數據
刪除完成以後跳轉到列表頁面
4.允許用戶操作修改新聞
第一部分:
1) 顯示出老的數據,提供給用戶修改
1.給列表後面的修改添加鏈接,指向到新的地址
傳遞id值作爲數據的唯一標識
2.製作顯示老數據的模板
根據 add.html 製作一個顯示老數據的模板
3.編寫路由實現/edit.html動態頁面
獲取id傳值
根據id讀取數據
使用ejs模板引擎,將數據和模板進行渲染,得到最終結果返回給客戶端
2) 保存修改後的數據
1.創建/save_add.html,用於修改數據
打開index.js模塊,在router上以post方式掛載/save_edit.html
2.接收客戶端傳值
注意:必須傳遞id值才能知道要被修改的數據是誰。在客戶端必須添加一個
隱藏域用於傳遞id值。
傳遞id <input type="hidden" name="id" value="<%=news._id%>">
3.查找要被修改的數據
listModel.findById(id)
4. 修改數據
data.title = title
......
data.save() 保存數據到數據庫
redirect(可以實現直接跳轉)
我的新聞系統的效果圖:
上面是上傳頁和新聞列表頁,其中包括數據修改,數據新增和數據添加。
這是代碼頁文件配置如下:
因爲我比較菜,沒有註冊自己的git,所以有需要一起探討的小朋友可以評論我,我們一起學習和進步。