[Node.js] 實作筆記-搭建註冊的API並儲存資料 (4)

前言

這是一個Node.js + Vue.js 使用MongoDB的學習筆記。

並不會有詳細的教學,因為這是筆記!!!

需要對node.js和vue.js有基楚的認識才適合觀看。

學習資源:https://www.udemy.com/share/102an4AkUddV1XRnw=/

事前準備

安裝body-parser middleware

body-parser 是一個處理HTTP請求的中間軟體,我們必須安裝他才能去處理HTTP請求。

終端機:

> npm install body-parser

成功安裝後,引入body-parser。

server.js:

const bodyParser = require("body-parser");

//使用body-parser中間件

app.use(bodyParser.urlencoded({extended:false}));

app.use(bodyParser.json());

建立一個註冊的API接口

users.js:

router.post("/register",(req,res) => {

res.json(req.body); //回傳我們送出請求的body

};

開啟Postman測試API

打入測試資料確定API有成功回傳。

註冊前驗證信箱是否被註冊

引入User momodels 加上 判斷是否註冊過

users.js:

const User = require("../../models/User"); //引入User models

// $route POST api/users/test

// @desc save/return user data

// @access public

router.post("/register",(req,res) => {

// res.json(req.body);



//Is email duplicate

User.findOne({email:req.body.email}) //找尋資料庫有無這個email

.then((user)=>{

if(user){

return res.status(400).json("此信箱已被註冊");//回傳一個狀態碼以及錯誤訊息

}

})

})

將使用者資料存入User模型

users.js:

               if(user){

return res.status(400).json("此信箱已被註冊");

}

else{

const newUser = new User({ //實例化一個user模型來儲放使用者資訊

name:req.body.name,

email:req.body.email,

//avatar,

password:req.body.password

})

}

加密使用者密碼安裝bcrypt

終端機:

> npm install bcrypt

在需要加密的地方引入bcrypt

users.js:

const bcrypt = require("bcrypt");

加密密碼並送出數據到資料庫

到bcrypt複製下面這段程式碼

bcrypt.genSalt(saltRounds, function(err, salt) {

bcrypt.hash(myPlaintextPassword, salt, function(err, hash) {

// Store hash in your password DB.

});

});

//saltRounds是加密的模式

//myPlaintextPassword加密對象

//hash加密後的密碼

users.js:

               if(user){

return res.status(400).json("此信箱已被註冊");

}

else{

const newUser = new User({ //實例化一個user模型來儲放使用者資訊

name:req.body.name,

email:req.body.email,

//avatar,

password:req.body.password

})

bcrypt.genSalt(10, function(err, salt) {

bcrypt.hash(newUser.password, salt, (err, hash) => {

if(err) throw err; //有錯誤的話就將錯誤拋出

newUser.password = hash; //將使用者的密碼改成加密後的

newUser.save() //調用存取方法,送到資料庫

.then(user => res.json(user)) //成功拿到使用者資訊

.catch(err => console.log(err)) //失敗打印出錯誤

});

});

}

使用Postman測試

MongoDB

到mongoDB你所創建的資料庫裡的Collections查看剛剛新增的資料是否有存入。