July 22, 2016

Xây dựng ứng dụng API với NodeJS - Phần 2.4: CRUD - Delete

source: https://scotch.io/wp-content/uploads/2014/04/restful-api-node-express-4-router.jpg
Đi tiếp cho hết quảng đường CRUD của loạt bài này, để còn đi qua một chặng đường khác đầy hào hứng và hấp dẫn hơn rất nhiều, can đoan luôn. Đây là bài cuối trong phần này, liên can chữ D đó là Delete. Bây giờ chúng ta sẽ thêm một phương thức mới vào service user mà chúng ta đã làm mấy lâu nay:
removeUserById: function (id, cb) {
      User
        .destroy({where: {id: id}})
        .then(function (number) {
          return number ? cb(null, true) : cb(null, false);
        })
        .catch(function (error) {
          return cb(error);
        });
    }

Bây giờ, chúng ta sẽ thêm một router mới đảm nhận vai trò xóa user theo email được cung cấp. Chỉnh sửa tập tin user.js trong thư mục app/controllers theo nội dung như bên dưới:
router.delete('/:id(\d+)', function (req, res, next) {
  userService.removeUserById(req.params.id, function (error, isDeleted) {
    if (error) {
      return next(error);
    }

    return res.json({message: "Successful", isDeleted: isDeleted});
  });
});

Và cuối cùng, cũng như những lần trước, chúng ta dùng CURL để thử nghiệm tính năng.
curl -X DELETE  "http://localhost:3000/user/1"

Kết quả nhận được sẽ tương tự như sau:
{"message":"Successful","isDeleted":true}

Thay đổi để không xóa vĩnh viễn

Nếu thực hiện từ đầu bài viết đến bây giờ, thì câu lệnh trên sẽ thực hiện lệnh SQL DELETE, đồng nghĩa là bị xóa vĩnh viễn khỏi hệ thống (database), điều này khiến không thể khôi phục dữ liệu khi cần thiết hoặc một lý do gì đó.
Vậy nếu chúng ta cần xóa nhưng chỉ là xóa tạm thời thì sau, thay vì dùng DELETE thì ta dùng UPDATE thay thế. Nhưng cách thức như thế nào? Không lẽ lại dùng phương thức save như phần 2.3 đã minh họa trước đó. Điều đó thật sự không cần thiết nếu bạn đã dùng Sequelize - một công cụ ORM cực kỳ hữu hiệu - và nó đã lo sẵn vấn đề này cho bạn rồi.
Để thực hiện điều này, bạn cần chỉnh sửa lại tập tin schemas.js trong thư mục app/models như sau:
var User = sequelize.define('User', {
    email: {type: Sequelize.STRING(250), allowNull: false, unique: true},
    password: {type: Sequelize.STRING, allowNull: false},
    first_name: Sequelize.STRING,
    last_name: Sequelize.STRING,
    address: Sequelize.STRING,
    phone_number: Sequelize.STRING,
    last_logged_in: Sequelize.DATE,
    status: {type: Sequelize.BOOLEAN, defaultValue: true}
  }, {
    timestamps: true,
    paranoid: true,
    underscored: true,
    tableName: 'users'
  });

Hãy chú ý là mình đã thêm một dòng paranoid: true vào cấu trúc bên trên. Với khai báo paranoid này, thao tác xóa sẽ tự động chuyển từ DELETE sang UPDATE và mọi chuyện không cần phải thêm thắt gì nữa. Hãy drop table vào chạy lại ứng dụng, sau đó thực hiện lại việc tạo mới user như phần 2.1, và thực hiện xóa user như trình bày trong phần này, bạn sẽ thấy sự khác biệt khi quan sát cấu trúc dữ liệu.

Đến đây thì chặng đường liên quan đến CRUD cũng kết thúc, sẽ đi qua giai đoạn khác. Mọi người chờ phần tiếp theo ha

Xây dựng ứng dụng API với NodeJS - Phần 2.1: CRUD - Create
Xây dựng ứng dụng API với NodeJS - Phần 2.2: CRUD - Read
Xây dựng ứng dụng API với NodeJS - Phần 2.3: CRUD - Update

source:

git clone https://github.com/tmquang6805/api-express-tut-demo.git api_tut
cd api_tut
git checkout fd98daf

No comments:

Post a Comment