Skip to content

Commit

Permalink
done Part10-User-api(2)
Browse files Browse the repository at this point in the history
  • Loading branch information
andy6804tw committed Jan 1, 2018
1 parent 5193345 commit 1842447
Show file tree
Hide file tree
Showing 6 changed files with 241 additions and 4 deletions.
3 changes: 3 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,3 +30,6 @@
- User新增、顯示
- [Link 連結](https://github.com/andy6804tw/RESTful_API_start_kit/tree/Part9-User-api(1))
- [Tutorial 教學](/tutorials/Part9-User-api(1).md)
- User修改、刪除
- [Link 連結](https://github.com/andy6804tw/RESTful_API_start_kit/tree/Part10-User-api(2))
- [Tutorial 教學](/tutorials/Part10-User-api(2).md)
1 change: 0 additions & 1 deletion src/server/controllers/article.controller.js
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@ const articlePost = (req, res) => {
const articlePut = (req, res) => {
// 取得修改id
const articleId = req.params.article_id;
console.log(articleId);
// 取得修改參數
const insertValues = req.body;
articleModule.modifyArticle(insertValues, articleId).then((result) => {
Expand Down
24 changes: 23 additions & 1 deletion src/server/controllers/user.controller.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,26 @@ const userPost = (req, res) => {
}).catch((err) => { return res.send(err); }); // 失敗回傳錯誤訊息
};

/* User PUT 修改 */
const userPut = (req, res) => {
// 取得修改id
const userId = req.params.user_id;
// 取得修改參數
const insertValues = req.body;
userModule.modifyUser(insertValues, userId).then((result) => {
res.send(result); // 回傳修改成功訊息
}).catch((err) => { return res.send(err); }); // 失敗回傳錯誤訊息
};

/* User DELETE 刪除 */
const userDelete = (req, res) => {
// 取得刪除id
const userId = req.params.user_id;
userModule.deleteUser(userId).then((result) => {
res.send(result); // 回傳刪除成功訊息
}).catch((err) => { return res.send(err); }); // 失敗回傳錯誤訊息
};

const test = (req, res) => {
res.send('測試');
};
Expand All @@ -28,5 +48,7 @@ const test = (req, res) => {
export default {
test,
userGet,
userPost
userPost,
userPut,
userDelete
};
55 changes: 53 additions & 2 deletions src/server/modules/user.module.js
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ const createUser = (insertValues) => {
console.error('SQL error: ', error);
reject(error); // 寫入資料庫有問題時回傳錯誤
} else if (result.affectedRows === 1) {
resolve(`新增成功! article_id: ${result.insertId}`); // 寫入成功回傳寫入id
resolve(`新增成功! user_id: ${result.insertId}`); // 寫入成功回傳寫入id
}
connection.release();
});
Expand All @@ -57,7 +57,58 @@ const createUser = (insertValues) => {
});
};

/* User PUT 修改 */
const modifyUser = (insertValues, userId) => {
return new Promise((resolve, reject) => {
connectionPool.getConnection((connectionError, connection) => { // 資料庫連線
if (connectionError) {
reject(connectionError); // 若連線有問題回傳錯誤
} else { // User資料表修改指定id一筆資料
connection.query('UPDATE User SET ? WHERE user_id = ?', [insertValues, userId], (error, result) => {
if (error) {
console.error('SQL error: ', error);// 寫入資料庫有問題時回傳錯誤
reject(error);
} else if (result.affectedRows === 0) { // 寫入時發現無該筆資料
resolve('請確認修改Id!');
} else if (result.message.match('Changed: 1')) { // 寫入成功
resolve('資料修改成功');
} else {
resolve('資料無異動');
}
connection.release();
});
}
});
});
};

/* User DELETE 刪除 */
const deleteUser = (userId) => {
return new Promise((resolve, reject) => {
connectionPool.getConnection((connectionError, connection) => { // 資料庫連線
if (connectionError) {
reject(connectionError); // 若連線有問題回傳錯誤
} else { // User資料表刪除指定id一筆資料
connection.query('DELETE FROM User WHERE user_id = ?', userId, (error, result) => {
if (error) {
console.error('SQL error: ', error);// 資料庫存取有問題時回傳錯誤
reject(error);
} else if (result.affectedRows === 1) {
resolve('刪除成功!');
} else {
resolve('刪除失敗!');
}
connection.release();
});
}
});
});
};


export default {
selectUser,
createUser
createUser,
modifyUser,
deleteUser
};
4 changes: 4 additions & 0 deletions src/server/routes/user.route.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,5 +7,9 @@ router.route('/')
.get(userCtrl.userGet) /** 取得 User 所有值組 */
.post(userCtrl.userPost); /** 新增 User 值組 */

router.route('/:user_id')
.put(userCtrl.userPut) /** 修改 User 值組 */
.delete(userCtrl.userDelete); /** 刪除 User 值組 */


export default router;
158 changes: 158 additions & 0 deletions tutorials/Part10-User-api(2) .md
Original file line number Diff line number Diff line change
@@ -0,0 +1,158 @@
## 本文你將會學到
- 如何修改資料庫一筆用戶資料
- 如何刪除資料庫一筆用戶資料
- 使用Postman測試PUT與DELETE

## 前言


## 修改user

#### user.module.js

傳入值 `insertValues` 是使用者要修改的資料為一個物件 Object 型態,這個變數是由 `user.controller.js` 傳過來的,此外旁邊多了一個 `userId` 這個就是你要修改的 id 用在 WHERE 語句供修改哪筆資料。

```js
// user.module.js
...
/* User PUT 修改 */
const modifyUser = (insertValues, userId) => {
return new Promise((resolve, reject) => {
connectionPool.getConnection((connectionError, connection) => { // 資料庫連線
if (connectionError) {
reject(connectionError); // 若連線有問題回傳錯誤
} else { // User資料表修改指定id一筆資料
connection.query('UPDATE User SET ? WHERE user_id = ?', [insertValues, userId], (error, result) => {
if (error) {
console.error('SQL error: ', error);// 寫入資料庫有問題時回傳錯誤
reject(error);
} else if (result.affectedRows === 0) { // 寫入時發現無該筆資料
resolve('請確認修改Id!');
} else if (result.message.match('Changed: 1')) { // 寫入成功
resolve('資料修改成功');
} else {
resolve('資料無異動');
}
connection.release();
});
}
});
});
};
...
```

#### user.controller.js
這邊比較特別的是由於修改資料時要指定是哪一筆值組要修改所以勢必要有id,這邊使用 `req.params` 方式將網址上的 id 參數讀取下來(例如:http://127.0.0.1:3000/api/user/1)後面的1代表就是你要修改的id值。

```js
// user.controller.js
import userModule from '../modules/user.module';
...
/* User PUT 修改 */
const userPut = (req, res) => {
// 取得修改id
const userId = req.params.user_id;
// 取得修改參數
const insertValues = req.body;
userModule.modifyUser(insertValues, userId).then((result) => {
res.send(result); // 回傳修改成功訊息
}).catch((err) => { return res.send(err); }); // 失敗回傳錯誤訊息
};
...
```

#### user.route.js
這支檔案就是要指定你的路徑,因為是修改所以使用 put 請求,有發現到賢面路徑跟 GET 與 POST 不同嗎?是這樣的由於修改資料要取得修改的id所以這邊在網址上要求 `:user_id` 加個冒號代表有個 `req.params` 功能。

```js
// user.route.js
import userCtrl from '../controllers/user.controller';
...
/** 修改 User 值組 */
router.route('/:user_id').put(userCtrl.userPut);
...
```

#### PUT測試
將程式碼 `yarn build``yarn start` 後,開啟Postman在網址列輸入 `http://127.0.0.1:3000/api/user/1` 並選擇 PUT 請求方式,接下來是要放入修改的內容,`Body > raw > 選擇 JSON(application/json)`,將所有要修改的資料寫成 JSON 格式在下面空白處如下圖,最後再點選 Send 送出,修改成功後會有成功的字串,此時代表你成功了修改資料庫的內容,若你輸入的id有誤下面訊息也會提供你錯誤的線索像是查無此id。

```json
{
"user_id":1,
"user_name":"10程式中",
"user_mail":"[email protected]",
"user_password":"1010"
}
```



## 刪除user

#### user.module.js
刪除作法也跟修改差不多也是要有傳入 id 名為 userId 的參數,使用 `DELETE` 刪除資料表 user 內的某一筆值組。

```js
// user.module.js
...
/* User DELETE 刪除 */
const deleteUser = (userId) => {
return new Promise((resolve, reject) => {
connectionPool.getConnection((connectionError, connection) => { // 資料庫連線
if (connectionError) {
reject(connectionError); // 若連線有問題回傳錯誤
} else { // User資料表刪除指定id一筆資料
connection.query('DELETE FROM User WHERE user_id = ?', userId, (error, result) => {
if (error) {
console.error('SQL error: ', error);// 資料庫存取有問題時回傳錯誤
reject(error);
} else if (result.affectedRows === 1) {
resolve('刪除成功!');
} else {
resolve('刪除失敗!');
}
connection.release();
});
}
});
});
};
...
```

#### user.controller.js
這邊主要是接收刪除的id利用 `req.params.user_id` 儲存到變數 `userId` 中在丟入 module 內的 `deleteuser` 刪除函式執行的帶回傳。

```js
// user.controller.js
import userModule from '../modules/user.module';
...
/* User DELETE 刪除 */
const userDelete = (req, res) => {
// 取得刪除id
const userId = req.params.user_id;
userModule.deleteUser(userId).then((result) => {
res.send(result); // 回傳刪除成功訊息
}).catch((err) => { return res.send(err); }); // 失敗回傳錯誤訊息
};
...
```

#### user.route.js
加上刪除的路徑並使用 `delete` 請求方式。

```js
import userCtrl from '../controllers/user.controller';

...
router.route('/:user_id')
.put(userCtrl.userPut) /** 修改 User 值組 */
.delete(userCtrl.userDelete); /** 刪除 User 值組 */

export default router;
```

#### 刪除測試
將程式碼 `yarn build``yarn start` 後,開啟Postman在網址列輸入 `http://127.0.0.1:3000/api/user/1` 並選擇 DELETE 請求方式,完成後按下 Send 送出後即可發現有刪除成功訊息。

0 comments on commit 1842447

Please sign in to comment.