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:

July 19, 2016

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

source: https://scotch.io/wp-content/uploads/2014/04/restful-api-node-express-4-router.jpg
Tiếp theo những phần trước, bài này sẽ đi tới phần Update trong CRUD. Để minh họa, mình sẽ viết tiếp phần login vừa rồi, sau khi login sẽ cập nhật thông tin "last_logged_in" chính là ngày hiện hành. Bây giờ chúng ta sẽ sửa lại phương thức login của tập tin user.js trong thư mục app/services như sau:
login: function (email, password, cb) {
      var isSuccessful = true;
      User
        .findOne({
          where: {email: email}
        })
        .then(function (instance) {
          if (!instance) {
            return cb(null, false);
          }
          var user = _.clone(instance.dataValues);
          if (user.password !== password) {
            isSuccessful = false;
            return;
          }
          instance.last_logged_in = sequelize.fn('NOW');
          return instance.save({silent: true});
        })
        .then(function () {
          return cb(null, isSuccessful);
        })
        .catch(function (error) {
          return cb(error);
        });
    }

July 17, 2016

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

source: https://scotch.io/wp-content/uploads/2014/04/restful-api-node-express-4-router.jpg
Trong phần này, mình sẽ minh họa việc đọc dữ liệu bằng thao tác login. Trong bài này, mình chỉ dùng phương thức findOne() mà được cung cấp sẵn bởi Sequelize nhằm tìm một đối tượng duy nhất. Kết quả trả về chỉ một dòng dữ liệu duy nhất (được phát sinh bởi LIMIT = 1) hoặc là không tìm thấy kết quả nào hết. Đây chỉ là một trong những phương thức lấy dữ liệu mà Sequelize cung cấp, bên cạnh đó có những phương thức khác như: findAll(), findById()

July 14, 2016

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

source: https://scotch.io/wp-content/uploads/2014/04/restful-api-node-express-4-router.jpg
Ở phần trước, chắc hẳn không ít bạn sẽ (tự) hỏi tại sao không là MongoDB mà là MySQL? MongoDB không phải là thời thượng ah? MySQL già cõi rồi xài chi?...Vô số câu hỏi được đặt ra. Và câu trả lời của mình tại sao loạt bài này dùng MySQL mà không dùng MongoDB

Nói một câu đơn giản, dễ hiểu, xúc tích nhất là: "Mình thích"
Nói một cách cụ thể hơn là: "MongoDB với NodeJS thì nó nhan nhãn hằng ha sa số rồi, thêm 1 bài hay bớt 1 bài cũng không có gì. Một phần nữa MySQL cũng khá thân quen rồi, nên tiếp cận dễ hơn cho đa số người."

July 11, 2016

Xây dựng ứng dụng API với NodeJS - Phần 1: Khởi tạo kiến trúc

Building a RESTful API Node and Express 4
source: https://scotch.io/wp-content/uploads/2014/04/restful-api-node-express-4-router.jpg
Loạt bài này mình sẽ giới thiệu cách tạo một ứng dụng RESTful API dựa trên NodeJS và Express4. Phần đầu này, chỉ là khởi tạo kiến trúc, và lẽ dĩ nhiên, đây không phải là cách duy nhất, nhưng đây là cách quen thuộc mà mình vẫn hay dùng xưa nay. Việc khởi tạo một ứng dụng NodeJS bây giờ có thể gọi là đơn giản nhiều lắm với những công cụ đã được hỗ trợ sẵn.