phanduc0908

REST API with MySQL

Sep 30th, 2018
47
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.13 KB | None | 0 0
  1. ---
  2. title:"REST API trong NodeJS với MySQL"
  3. author:DucPV
  4. ---
  5. ## Database ?
  6. Trong bài viết này chúng ta dùng MySQL, cú pháp của MySQL tương tự như SQL Server. Đầu tiên cần cài đặt MySQL [link Download](https://www.mysql.com/downloads/). Hoặc làm theo hướng dẫn [Video](https://www.youtube.com/watch?v=Ddx13KlW8yQ).
  7. #### Tạo database
  8.  
  9. >Có thể tạo database bằng lệnh trong _MySQL Command Line client_ hoặc trong _MySQL Workbench_. Chúng ta sẽ dùng lệnh:
  10.  
  11. * Mở _MySQL Command Line client_ để kiểm tra các databse(DB) đã tồn tại, tránh việc trùng lặp tên khi tạo mới DB:
  12.  
  13. ![](https://www.javaguicodexample.com/snortiisphpbaseperladodb_files/snortmysqlphperliisoinkmasterwinxp128.png)
  14. * Tạo mới một DB có tên Blog: paste lệnh dưới vào command line.
  15. ```
  16. CREATE DATABASE BlogDB;
  17. ```
  18.  
  19. * Tạo bảng có tên blog:
  20. ```
  21. CREATE TABLE Blog(
  22. id int PRIMARY KEY AUTO_INCREMENT,
  23. title_name varchar(50) NOT NULL,
  24. author_name varchar(50) NOT NULL,
  25. content varchar(250) NOT NULL
  26. );
  27. ```
  28.  
  29. ## Application
  30. > Chúng ta bắt đầu khởi tạo project. Tạo một folder chứa source code. Bạn chắc chăn là máy tính của mình đã cài Node. Nếu chưa cài đặt tham khảo phần **Cài đặt Node và package.json** trong bài viết dưới đây của mình [link](https://note.coralo.ooo/blog/2018-09-22-express-less-co-ban-trong-node-server/).
  31. #### 1.Setup app.js
  32. > Ứng dụng sẽ được chạy từ đây
  33. * Tạo file app.js
  34. * Cài đặt **express module**:
  35. ```
  36. npm install --save express
  37. ```
  38. * Copy đoạn code dưới đây vào app.js:
  39. ```
  40. const express = require('express');
  41. const app = express();
  42. const morgan = require('morgan');
  43. const port = process.env.port || 3000;
  44.  
  45. // test Understanding req.params.id
  46. app.get("/blog/:id", (req,res)=>{
  47. console.log("Website is fetching data from id: " + req.params.id);
  48. res.end();
  49. })
  50. app.listen(port, ()=>{
  51. console.log('Serner is listenning on port ' + port);
  52. });
  53. ```
  54. Ở đây mình có sử dụng thêm **module morgan** để có thể in ra console thông tin mỗi response.
  55. Như trong phương thức get "/blog/:id", khi viết **:id** thì phía sau blog sẽ là một param với tên param là _id_. Để lấy được param được gửi đi trên URL ta dùng "-req.params.id-"
  56. Kiểm tra: Chạy ứng dụng, mở trình duyệt mà nhập vào đường dẫn: localhost:3000/blog/3
  57. => console sẽ in ra "Website is fetching data from id:3"
  58.  
  59. #### 2.Kết nối với MySQL
  60. > Đầu tiên chúng ta cần sử dụng **mudule mysql** của npm. Trong bài viết trên mình cũng có hướng dẫn cách cài đặt một module của npm. Để cài đặt module mysql cũng tương tự vậy.
  61. ```
  62. npm install --save "mysql"
  63. ```
  64.  
  65. Tạo một folder có tên config, folder này chưa file kết nối với DB. Bên trong folder tạo file _dbContext.js_, copy đoạn code dưới đây:
  66. ```
  67. const mysql = require('mysql');
  68. const connection = mysql.createPool({
  69. host : "localhost",
  70. user : "root",
  71. password : "your_pasword",
  72. database : "database_name"
  73. });
  74. module.exports = connection;
  75. ```
  76. Mỗi khi chúng ta cần sử dụng kết nối chỉ cần require đến file này.
  77. #### 3. Setup Route
  78. > Việc chúng ta tương tác với một trang web chính là việc thao tác trên URL. Trong mô hình REST API chúng ta sẽ làm quen với CRUD(create,read,update,delete), với mỗi hành động sẽ do một **route** đảm nhiệm. Trong **Express JS**, route được tích hợp bên trong và rất dễ sử dụng.
  79.  
  80. * Tạo một folder tên routers, Folder này sẽ quản lý các route
  81. * Tạo file blog.js, dùng để quản lý các route của blog
  82. ###### 3.1.Read Blog
  83.  
  84. Copy đoạn code dưới đây và dán vào file blog.js:
  85.  
  86. ```
  87. const express = require('express');
  88. const router = express.Router();
  89. const connection = require('../config/dbContext.js'); // kết nối MySQL
  90.  
  91. // get all Blogs
  92. router.get("/blog", (req,res)=>{
  93. // stringQuery : các câu truy vấn lấy dữ liệu từ DB
  94. let stringQuery = "select * from blog";
  95. connection.query(stringQuery, (err,rows)=>{
  96. if(err){
  97. res.sendStatus(500);
  98. console.log("Error: "+ err);
  99. return;
  100. }
  101. return res.send({error:false,data:rows,message:"Blog list"});
  102. });
  103. });
  104. module.exports = router;
  105. ```
  106. Để kiểm tra mở trình duyệt nhập đường dẫn: localhost:3000/blog
  107. Kết quả sẽ trả về một mản chứa đối tượng JSON
  108. ###### 3.2.Read Blog by Id
  109. Sử lại file blog.js:
  110. ```
  111. const express = require('express');
  112. const router = express.Router();
  113. const connection = require('../config/dbContext.js'); // kết nối MySQL
  114.  
  115. // get blog by Id
  116. router.get("/blog/:id",(req,res)=>{
  117. const blogID = req.params.id; // lấy Id client gửi lên
  118. let queryString = "select * from blog where id = ?";
  119. // [blogID] : blogID tương ứng với ? thứ nhất
  120. connection.query(queryString,[blogID], (err,rows)=>{
  121. if(err){
  122. res.sendStatus(500);
  123. console.log("Error: " + err);
  124. return;
  125. }
  126. return res.send({error:false,data:rows[0],message:"Data"});
  127. });
  128. });
  129. module.exports = router;
  130. ```
  131. localhost:3000/blog/3
  132. ###### 3.3.Create Blog
  133. Cài đặt **module body-parser**
  134. ```
  135. npm install --save body-parser
  136. ```
  137. Sử lại file blog.js:
  138. ```
  139. const express = require('express');
  140. const bodyParser = require('body-parser');
  141.  
  142. const router = express.Router();
  143. const connection = require('../config/dbContext.js'); // kết nối MySQL
  144. router.use(bodyParser.urlencoded({extended:false}));
  145. // create Blog
  146. router.post("/blog/create",(req,res)=>{
  147. let titleName = req.body.title_name;
  148. let authorName = req.body.author_name;
  149. let content = req.body.content;
  150. let stringQuery = "insert into blog(title_name,author_name,content) values(?,?,?)";
  151. connection.query(stringQuery,[titleName,authorName,content],(error,result)=>{
  152. if(error){
  153. console.log("Error: " + err);
  154. }
  155. return res.send({error:false,data:result,message:"Insert successfull"});
  156. });
  157. });
  158. module.exports = router;
  159. ```
  160. ###### 3.4.Delete Blog
  161. Sửa lại file blog.js:
  162. ```
  163. const express = require('express');
  164. const bodyParser = require('body-parser');
  165. const router = express.Router();
  166. const connection = require('../config/dbContext.js'); // kết nối MySQL
  167. router.use(bodyParser.urlencoded({extended:false}));
  168.  
  169. // Delete Blogby Id
  170. router.delete("/blog/delete/:id", (req,res)=>{
  171. let blogID = req.params.id;
  172. let stringQuery = "Delete from blog where id = ?";
  173. connection.query(stringQuery,[blogID], (err,result)=>{
  174. if(err){
  175. console.log("Error: " + err);
  176. }
  177. return res.send({error:false,data:result,message:"Delete successfull"});
  178. })
  179. });
  180. module.exports = router;
  181. ```
  182. ###### 3.5.Update Blog
  183. Sửa lại file blog.js:
  184. ```
  185. const express = require('express');
  186. const bodyParser = require('body-parser');
  187. const router = express.Router();
  188. const connection = require('../config/dbContext.js'); // kết nối MySQL
  189. router.use(bodyParser.urlencoded({extended:false}));
  190.  
  191. // update Blog
  192. router.put("/blog/update/:id", (req,res)=>{
  193. let blogID = req.params.id;
  194. let titleName = req.body.title_name;
  195. let authorName = req.body.author_name;
  196. let content = req.body.content;
  197. let stringQuery = "update blog set title_name = ?, author_name = ?, content = ? where id = ?";
  198. connection.query(stringQuery,[titleName,authorName,content,blogID],(error,result)=>{
  199. if(error){
  200. console.log("Error: " + err);
  201. }
  202. return res.send({error:false,data:result,message:"Update successfull"});
  203. });
  204. })
  205. module.exports = router;
  206. ```
  207. ## Sử dụng Postman
  208. > Khi chúng ta update, create blog thì có câu hỏi đặt ra là dữ liệu để thêm/sửa sẽ được lấy từ đâu. Thực tế thì những dữ liệu đó sẽ được lấy từ form, tuy nhiên việc tạo ra form để kiểm tra xem dữ liệu thay đổi như thế nào là không tối ưu. Do vậy, chúng ra sẽ sử dụng Postman
  209.  
  210. Chúng ta có thể tải Postman về hoặc sử dụng extention có sắn của Google Chrome.
  211. ![](https://lh3.googleusercontent.com/he6FhqnwdRBJAaULacb1d2i3gakZk1aEB6Yh7--TibEiIsd4iT3-lsm0_5i-z9YGCx4Cvw5vY7M=w640-h400-e365)
  212. * Với việc kiểm tra read,delete thì chỉ cần nhập vào đường dẫn rồi chọn phương thức Get,Delete tương ứng.
  213. * Ứng dụng rõ nhất của Postman có thể thấy được là kiểm tra phương thức Post(create) và Put(update).
  214. ![](https://s3.amazonaws.com/postman-static-getpostman-com/postman-docs/requestBuilderUrlEncoded.png)
  215. Như đã đề cập ở phần trên về việc truyền dữ liệu như thế nào,Postman cung cấp cho chúng ta cách để truyền dữ liệu vào. Click vào **Body** , có 2 cột **key** và **value** tương ứng với **tên cột** và **dữ liệu của cột**
Add Comment
Please, Sign In to add comment