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()

Service User

Chúng ta sẽ thêm một phương thức login vào trong tập tin user.js trong thư mục app/services, nhiệm vụ là tìm kiếm một user có cùng email, và kiểm tra xem password nhập vào có đúng không, nếu mọi thứ hợp lý thì trả kết quả về là true ngược lại thì là false. Đoạn mã được thể hiện như bên dưới.
return {
    addNewUser: function (user, cb) {...},
    login: function (email, password, cb) {
      User.findOne({
        where: {email: email}
      })
        .then(function (instance) {
          if (!instance) {
            return cb(null, false);
          }
          var user = _.clone(instance.dataValues);
          if (user.password !== password) {
            return cb(null, false);
          }
          return cb(null, true);
        })
        .catch(function (error) {
          return cb(error);
        });
    }

Controller User

Bây giờ chúng ta sẽ thêm một router mới vào controller user, để thực hiện cho việc login. Để an toàn cho việc login, thì thường được dùng theo phương thức POST, thay vì dùng GET thông thường để lấy dữ liệu. Chúng ta cập nhật lại tập tin user.js trong thư mục app/controllers theo nội dung như bên dưới.
router.post('/login', function (req, res, next) {
  
  var email = req.body.email,
    password = req.body.password;

  if (!email || !validator.isEmail(email)) {
    var error = new Error('Email is required or is invalid email format');
    error.status = 400;
    return next(error);
  }

  if (!password) {
    var error = new Error('Password is required');
    error.status = 400;
    return next(error);
  }
  
  userService.login(email, password, function (error, isSuccess) {
    if (error) {
      return next(error);
    }
    return res.json({message: isSuccess ? "Successful" : "Fail"});
  });

});

Để thử nghiệm, chúng ta cần thực hiện như phần trước, sử dụng CURL là nhanh nhất.
curl -X POST -H "Content-Type: application/x-www-form-urlencoded" -d 'email=abc@demo.com&password=123456' "http://localhost:3000/user/login"

Nếu mọi chuyện không có lỗi gì phát sinh, bạn sẽ thấy thông báo tương tự như sau:
{
  "message": "Successful"
}

Vậy là hoàn tất cho phần này. Cũng mỏi tay rồi, hẹn phần tiếp theo vậy.

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

source:

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

No comments:

Post a Comment