使用node和express+mongodb實現資料增刪改功能

小周sri的碼農發表於2018-12-30

2018即將過去,2019即將來臨,前端技術不斷在在更新,學的東西越來越多。我們只有不斷的學習,才不能被淘汰。在前後端分離的一個時代,後端提供介面,前端呼叫介面,邏輯判斷,每個都是獨立的工作。如果自己在空餘的時間,想學習新的知識,卻沒有好的介面,只能寫寫假的json資料。或者網上開源的資料庫,mock,野狗資料庫,firebase,或者使用本地的json-server搭建本地資料庫使用也是完全沒有問題的,也可以正常的實現資料的介面請求。

 今天小編就寫一遍關於node寫介面的文件,會從環境搭建,資料庫連結,資料模型,介面文件以及到測試,一步一步的來,盡最大可能寫好,讓每一位讀者都能看懂,文章可能過程,希望慢慢理解

   2018最後的一篇部落格,希望在2019繼續努力

1.準備工作

  • postman介面測試工具,
  • node安裝
  • mlab資料儲存
  • mongodb資料庫

2.node + express環境搭建

2.1環境搭建之前,首先要檢查自己電腦是否安裝node環境,如果沒有安裝,先安裝node環境.

2.2在自己電腦建立一個目錄檔案,開啟自己終端,先進行初始化 cnpm init(在這裡使用了cnpm國內映象,如果沒有安裝,請自行安裝cnpm);

初始化之後會出現下面這個介面,會在我們的檔案中生成一個package.json檔案;

 

2.3在自己根目錄建立一個入口檔案,app.js檔案或者通過終端命令touch app.js建立一個檔案,

2.4這時候我們可以搭建伺服器環境,但是需要依賴express,這時候我們就需要安裝express

 

cnpm install express

 

2.5工作環境準備好之後,需要在我們的入口檔案引入express,並建立一個app實列,請看下面,

  2.5.1:port是我們的埠號,app.listen是監聽埠號執行

  2.5.2:然後通過node app.js執行,檢視伺服器是否正常執行成功,然後在瀏覽器出入http://localhost:5000,就可以檢視執行的結果了

 

 2.6但是我們每次修改程式碼的時候都要重新執行node app.js,這個時候我們只需要安裝nodemon,監聽node變化的一個工具

cnpm install nodemon -g  在這裡是全域性安裝

2.7:配置package.json啟動命令,在開發環境的時候,直接可以通過cnpm run app來監聽每次修改node的變化,nodemon我們已經全域性安裝過了,可以在任何地方都可以使用,只要我們每次修改程式碼都會發生變化,這樣我們就不會手動輸入命令了

       

3.資料庫mlab建立

3.1:mlab是MongoDB提供的免費儲存的資料庫,使用的時候必須先註冊,才可以使用,這個mlab需要FQ註冊,註冊登入之後會出現下面的介面

 

 

 

3.2然後點選Create  new 建立   》》》》  然後選擇下面的兩個,amazonSANDBOX最後點選右下角CONTINUE,會跳轉下一步

3.3在這個介面選擇國家地區,選擇US EAST和Europe都可以,然後點選CONTINUE,會跳轉下一步

3.4在這個介面,需要我們輸入一個名字,名字隨便輸入,然後點選CONTINUE,會跳轉下一步,

3.5在下一個頁面,然後在點選SUBMIT ORDER,這樣我們就建立好一個資料庫,然後點選進入資料庫中

3.6進入我的資料庫中,黃色警告提示我們需要建立一個使用者資訊,也就是我們最後連結的使用者名稱和密碼,點選add會彈出一個框,然後我門新增使用者名稱和密碼就可以了,最後點選CREATE,這樣我們的資料庫就已經建立完成了,接下來我們可以使用node連結我們的資料庫了

 

4.node連結MongoDB

4.1安裝mongoose連結資料庫

cnpm install mongoose

4.2然後在你的入口檔案引入(app.js),

const mongoose require('mongoose')

4.3在我們的根目錄建立一個config檔案,在confing中建立一個db.js檔案,這個檔案存放我們的資料庫的地址,連線資料庫的地址放在一個單獨的檔案,把我們伺服器的地址引入過了就行了,修改使用者名稱和密碼就行了,

4.4使用mongoose連結資料庫,在我們的根目錄引入config下面的db檔案。然後通過mongoose連結資料,最後在控制檯可以看到我們已經連結成功了,到現在為止,資料已經連結配置好了,接下來接開始寫介面

 

5.介面路由搭建和資料模型

5.1在我們的根目錄下建立一個router >>> api >>> useinfo.js檔案,這個用於存放我們的請求介面的路由檔案;

  5.1.1在userinfo檔案中引入express和路由,先寫一個get請求方法,

   

  5.2.2需要在我們的app.js檔案引入userinfo.js檔案,並使用router中介軟體,不然不會生效

/api/userinfo:這個相當於我們訪問的介面地址

//引入userinfo.js
const userinfo = require('./router/api/userinfo')


//使用router中介軟體
app.use('/api/userinfo',userinfo)

然後就可以在瀏覽器輸入http://localhost:5000/api/userinfo

 5.2postman介面測試工具使用

  5.2.1我們已經寫好一個get的測試請求,接下來我們進行測試,我們可以通過postman這個工具進行測試,下載好之後需要登入註冊,

  下載好之後開啟這個工具,第一步輸入我們的地址,點選send,就能看到我們請求的結果是否正確了

 

5.3建立資料模型

5.3.1建立我們的資料模型用於存放資料欄位名。在根目錄建立models檔案,然後建立Userinfo.js檔案,用於寫資料欄位模型。

建立了name,age,sex,address,date幾個欄位名,(使用什麼欄位建立什麼欄位,在這裡先使用這麼多)

mongoose.Schema是一個MongoDB物件建模工具,

每一個Schema對應一個mongoDB collection 並且在那個collection裡面定義了documents的模型。

 

5.4編寫路由介面,實現資料的新增,刪除,修改功能

在我們路由檔案userinfo引入資料模型Userinfo檔案,這樣我們就可以查詢資料庫中是否有這些欄位名了

const Userinfo =require('../../models/Userinfo')

5.4.1新增使用者資訊

  新增使用者資訊肯定需要使用post去新增使用者資訊了,這時候我們需要安裝第三方依賴body-parser

cnpm install body-parser

  5.4.2在安裝完之後,需要在app.js檔案引入,並使用,這樣我們就可以使用post進行資料儲存了

const bodyParser = require('body-parser')

//使用body-parser中介軟體
app.use(bodyParser.urlencoded({extended:false}));
app.use(bodyParser.json());

5.4.3新增資料介面,。先建立一個空的對,判斷資料是否存在,如果不存在的話,通過new Userinfo新增資料庫中,Userinfo就是我們上面引入的模型

// $route  GET api/userinfo/add
// @desc   新增使用者資料
// @access public
router.post('/add',(req,res) => {
    const UserName = {};
    if(req.body.name) UserName.name = req.body.name;
    if(req.body.sex) UserName.sex = req.body.sex;
    if(req.body.age) UserName.age = req.body.age;
    if(req.body.address) UserName.address = req.body.address;
    
    new Userinfo(UserName).save().then(user => {
    res.json(user);
  });
})

5.4.4使用postman介面測試,請求介面型別是post請求,輸入我們的介面地址,新增欄位,點選send,就可以看到我們新增資料的欄位了。

 

5.5獲取所有資料

5.5.1通過get請求,獲取資料庫中所有的資料資訊

// $route  GET api/userinfo
// @desc   獲取所有的資料
// @access public
//find()是mongodb的資料庫語法
router.get("/", (req,res) => {
    Userinfo.find().then(user => {
        if(!user) {
            return res.status(400).json("沒有任何資料存在")
        }
        return res.json(user)
    }).catch(err => {
        return res.status(404).json(err)
    })
});

5.5.1通過postman測試介面,http://localhost:5000/api/userinfo,就可以獲取到我們資料庫中所有的資訊了,

 

5.6獲取單個使用者資訊

5.6.1:通過根據使用者的id去獲取單個使用者的資訊

// $route  GET api/userinfo/:id
// @desc   獲取單個的資料
// @access public
router.get('/:id',(req,res) => {
    Userinfo.findOne({_id:req.params.id}).then(user => {
        if(!user) {
            return res.status(400).json("沒有任何資料存在")
        }
        return res.json(user)
    }).catch(err => {
        return res.status(404).json(err)
    })
})

5.6.2通過postman測試介面,http://localhost:5000/api/userinfo/5c27929b2a87821914f8b195,就可以獲取到我們資料庫中所需要的資訊

 

5.7編輯使用者資訊

5.7.1編輯使用者資訊,也是根據使用者的id去更新資料,通過monoose提供的findByIdAndUpdate去更新資料庫

// $route  GET api/userinfo/exit/:id
// @desc   編輯使用者資訊
// @access public

router.post('/exit/:id',(req,res) => {
    const UserName = {};
    if(req.body.name) UserName.name = req.body.name;
    if(req.body.sex) UserName.sex = req.body.sex;
    if(req.body.age) UserName.age = req.body.age;
    if(req.body.address) UserName.address = req.body.address;
    //更新資料
    Userinfo.findByIdAndUpdate({ _id: req.params.id }, 
        { $set: UserName }, { new: true })
    .then(user => {
      if (!user) {
        return res.status(400).json("資料不存在");
      }
     res.json(user);
    })
    .catch(err => {
      return res.status(404).json(err);
    });
})

5.7.2這是我們更新第一個欄位的使用者資訊,把張三的名字改成張飛,在postman中可以看到我們成功更新資料

 

5.8刪除使用者資訊

5.8.1在這裡,我們只刪除根據使用者的id刪除,不會實現全部刪除。

// $route  GET api/userinfo/delete/:id
// @desc   刪除使用者資訊
// @access public

router.delete('/delete/:id',(req,res) => {
    Userinfo.findByIdAndRemove({_id:req.params.id}).then(user => {
        user.save().then(user => {
            res.json(user)
        })
    }).catch(err => {
        return res.status(404).json(err)
    })
})

5.8.2我們通過postman測試http://localhost:5000/api/userinfo/delete/5c27929b2a87821914f8b195,成功姓名為張飛的資料刪除成功

 

以上都是我們使用node+express實現的資料的新增,刪除,修改功能。希望這篇部落格能夠幫助你。提前祝願2019前端小夥伴元旦快樂,2019更上技術更上一層樓。

 

相關文章