Trang chủ Khóa họcWeb Xây dựng một CRUD app đơn giản với Nodejs và Mongodb – Phần 3

Xây dựng một CRUD app đơn giản với Nodejs và Mongodb – Phần 3

Bởi admin

Tạo RESTfull API CRUD

RESTful là một kiểu kiến trúc dùng để thiết kế web service, ý tưởng chính là sử dụng giao thức HTTP đơn giản để gọi đến server chứ không sử dụng các giao thức phức tạp khác. 

Trong thiết kế cơ bản của rest thì resources được thực thi bằng tập các động từ thông dụng, chẳng hạn như để tạo resources thì dùng HTTP POST, để lấy resources thì dùng HTTP GET, để cập nhật thì dùng HTTP PUT, để xóa thì dùng HTTP DELETE…

Vậy còn CURD là gì ? CURD thực ra là một thuật ngữ của dân lập trình, nó là viết tắt của “Create, Read, Update, Delete” hay cụ thể là các thao tác đối với dữ liệu trong database.

Trong mongodb, một collection tương tự như một table trong SQL, collection chứa thông tin về một thực thể nào đó, trong collection chứa nhiều document, mỗi document tương tự như một row trong SQL, và trong mỗi document lại chứa các field tương tự như column, mỗi field chứa các cặp giá trị dạng key-value. Ví dụ:

tasks: [
   {
       date: '2019-06-22',
       work: [
           'Learn mongodb',
           'Create a mongo database'
       ]
   },
   {
       date: '2019-06-23', // a field
       work: 'Create crud api with database' // a field
   } // a document
] // a collection

Để bắt đầu thao tác với dữ liệu, chúng ta cần khai báo một Schema, Schema quy định các dữ liệu sẽ được lưu trong một document. Trong ví dụ này, chúng ta chỉ cần lưu thông của công việc cần làm:

// define tasks schema:
const taskSchema = mongoose.Schema({
   content: { type: String },
   status: { type: Boolean }
});
const Task = mongoose.model('Task', taskSchema);

Ngoài ra, chúng ta cần cài module body-parser cho nodejs để server có thể đọc được các dữ liệu gửi từ phía client dưới dạng json, nếu không thì các dữ liệu sẽ bị undefined.

npm i body-parser

Trong file app.js, thêm khai báo sau để server nhận được các dữ liệu dạng json từ client:

app.use(bodyParser.json());

Lúc này thì chúng ta có thể bắt đầu tạo các api CRUD với database mongodb.

CREATE

Api đầu tiên sẽ là api tạo thêm task mới, chúng ta sẽ lấy dữ liệu trong request body từ client để lưu vào database, nếu quá trình lưu thông tin không xảy ra lỗi gì thì server sẽ phản hồi lại thông báo thêm thành công, ngược lại thì sẽ báo không thành công và in lỗi ra console log trên server. Như đã giới thiệu, chúng ta thiết kế web service theo RESTful api nên chúng ta sẽ dùng phương thức post cho api này. Để lưu thông tin lên mongodb, chúng ta cần khai báo dữ liệu trong model đã tạo rồi dùng phương thức save để lưu lên mongodb.

// api add new task:
app.post('/task', (request, response) => {
   const newTask = new Task({
       content: request.body.content,
       status: false
   });
   newTask.save(err => {
       if (err) {
           response.status(400).json({ message: 'Không thể thêm nhiệm vụ mới' });
           console.log('Can not add new task because ' + err);
       }
       else {
           response.status(200).json({ message: 'Thêm nhiệm vụ mới thành công' });
       }
   });
});

READ

Để lấy dữ liệu, chúng ta sẽ dùng hàm find để lấy tất cả dữ liệu có trong collection đó.

// api get list task:
app.get('/task', (request, response) => {
   Task.find((err, res) => {
       if (err) {
           response.status(400).json({ message: 'Không thể lấy dữ liệu' });
           console.log('Error when getting data ' + err);
       }
       else {
           response.status(200).json(res);
       }
   });
});

UPDATE

Trong mongodb, mỗi một document đều có một id do mongodb sinh ra lúc chúng ta lưu trữ. Trong ví dụ này, để cập nhật một task, đầu tiên chúng ta phải tìm ra task cần cập nhật dựa vào id của nó, nếu task đó tồn tại trong database thì chúng ta mới tiếp tục thực hiện công việc cập nhật.

// api update a task:
app.put('/task', async (request, response) => {
   // find a task by id:
   const task = await Task.findById(request.body.id);
   // check if result is null:
   if (!task) {
       response.status(404).json({ message: 'Không tìm thấy dữ liệu nào với id ' + request.body.id });
       return;
   }
   // else, continues update:
   task.updateOne({ id: request.body.id, status: !task.status }, (err, raw) => {
       if (err) {
           response.status(400).json({ message: 'Không thể cập nhập nhiệm vụ' });
           console.log('Error when updating data ' + err);
       }
       else {
           response.status(200).json({ message: 'Cập nhật nhiệm vụ thành công' });
       }
   });
});

DELETE

// api delete a task:
app.delete('/task', async (request, response) => {
   Task.deleteOne({ _id: request.body.id }, (err) => {
       if (err) {
           response.status(400).json({ message: 'Không thể xóa nhiệm vụ' });
           console.log('Error when deleting data ' + err);
       }
       else {
           response.status(200).json({ message: 'Nhiệm vụ đã bị xóa' });
       }
   });
});

Test API

Sau khi tạo ra các api CRUD cơ bản với mongodb, chúng ta sẽ dùng phần mềm Postman để test các api trên, các bạn có thể tải Postman tại https://www.getpostman.com/.

Trong giao diện chính của Postman, chúng ta chọn phương thức cần gửi và nhập url của api vào textbox. Để gửi data qua request body, chúng ta chọn tab body ở bên dưới textbox, sau đó chọn raw và chọn JSON(application/json) rồi nhập data cần truyền vào ở dạng json.

Sau đó nhấn nút send để gửi request.

Trong bài tiếp theo, chúng ta sẽ tạo giao diện website cho web app.

Related Posts

1 Bình luận

AutoLike Tháng mười hai 2, 2019 - 5:14 chiều

Status Auto Liker, Increase Likes, Autoliker, Working Auto Liker, Auto Liker, Autolike, Autoliker, ZFN Liker, auto liker, Photo Liker, Auto Like, Photo Auto Liker, autoliker, Status Liker, autolike, Autolike International, auto like

Phản hồi

Để lại một bình luận