node+mongodb+mongoose實現新聞系統

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,所以有需要一起探討的小朋友可以評論我,我們一起學習和進步。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章