03/08/2018, 10:21

Bài 10: Áp dụng Yargs NodeJS vào ứng dụng quản lý học sinh

Như vậy là bạn đã hiểu được phần nào về module Yargs và các cấu hình options ...

Như vậy là bạn đã hiểu được phần nào về module Yargs và các cấu hình options trong Yargs rồi đấy. Vậy trong video này ta sẽ vận dụng những gì đã học để làm một bài tập nho nhỏ có sử dụng những hàm đã làm ở bài xây dựng chức năng quản lý học sinh. Ở bài đó chúng ta sử lý thêm dữ liệu bằng code nên không hay lắm, vì vậy trong bài này ta sử dụng module Yargs để lấy thông tin nhập vào từ bàn phím thông qua lệnh command line.

1. Copy thư viện quản lý học sinh

Vì chúng ta chưa học cách import các thư viện nên tạm thời bạn hãy copy tất cả các hàm nằm trong file node-persist.js (các hàm xử lý học sinh) vào file yargs-demo.js. Lúc này file sẽ có nội dung như sau:

var storage = require('node-persist');

storage.initSync({
    dir : "mydata",
    ttl : false
});

function getAllStudents()
{
    var students = storage.getItemSync('students');
    if (typeof students === "undefined"){
        return [];
    }
    
    return students;
}


function showStudents()
{
    var students = getAllStudents();
    for (var i = 0; i < students.length; i++)
    {
        console.log('Student: ' + students[i].fullname + "(" +students[i].id+ ")");
    }
}

function addStudent(studentId, studentName)
{
    var students = getAllStudents();
    students.push({
        id: studentId,
        fullname : studentName
    });
    
    storage.setItemSync('students', students);
}

function removeStudent(studentId)
{
    var students = getAllStudents();
    
    for (var i = 0; i < students.length; i++)
    {
        if (students[i].id === studentId){
            students.splice(i, 1);
        }
    }
    
    storage.setItemSync('students', students);
}

function editStudent(studentId, studentName)
{
    var students = getAllStudents();
    
    for (var i = 0; i < students.length; i++)
    {
        if (students[i].id === studentId){
            students[i].fullname = studentName;
        }
    }
    
    storage.setItemSync('students', students);
}

2. Xử lý các option của chương trình 

Chúng ta có 4 action chính là thêm, xóa, sửa và hiển thị danh sách học sinh.

Lưu ý là tất cả những đoạn code dưới đây bạn khai báo lần lượt phía dưới của file yargs-demo.js nhé. Đầu tiên chúng ta se khởi tạo đối tượng Yargs mới.

Khởi tạo đối tượng Yargs.

var yargs = require('yeags');

Options hiển thị danh sách, thêm, xóa, sửa

Một số lưu ý trước khi code:

  • Option hiển thị danh sách: Chỉ hiển thị danh sách nên mình không cần ràng buộc gì cả
  • Option thêm: Cần hai tham số là id và fullname, id là kiểu int và fullname kiểu string, cả hai đều bắt buộc nhập.
  • Option xóa: Cần một tham số là id cần xóa
  • Option sửa: Cần hai tham số id (để biết sửa sinh viên nào) và fullname, id là kiểu int và fullname kiểu string, cả hai đều bắt buộc nhập.

Sau đây là toàn bộ code:

var argv = yargs
                .command("list", "Get List Student", function(yargs){
                    // Nothing
                })
                .command('create', 'Create a Student', function(yargs){
                    return yargs.options({
                        id : {
                            demand : true,
                            type : "number"
                        },
                        fullname : {
                            demand : true,
                            type : "string"
                        }
                    });
                })
                .command('delete', 'Delete a Student', function(yargs){
                    return yargs.options({
                        id : {
                            demand : true,
                            type : "number"
                        }
                    });
                })
                .command('edit', 'Edit a Student', function(yargs){
                    return yargs.options({
                        id : {
                            demand : true,
                            type : "number"
                        },
                        fullname : {
                            demand : true,
                            type : "string"
                        }
                    });
                })
                .argv;

3. Xử lý action của chương trình

Tên action ta sẽ lấy dựa vào key _ của biến argv (xem lại bài module node-persist).

Chúng ta sử dụng lệnh kiểm tra điều kiện if để xử lý action dạng như sau:

// Lấy tên action
var action = argv._[0];

if (action === 'list'){
    // list
}
else if (action === 'create'){
   // create
}
else if (action === 'delete'){
   // delete
}
else if (action === 'edit'){
    // edit
}
else{
    // Not found
}

Và đây là code xử lý tương ứng cho mỗi action.

// Lấy tên action
var action = argv._[0];

if (action === 'list'){
    showStudents();
}
else if (action === 'create'){
    addStudent(argv.id, argv.fullname);
    console.log('Add Successfully!');
    showStudents();
}
else if (action === 'delete'){
    removeStudent(argv.id);
    console.log('Delete Successfully!');
    showStudents();
}
else if (action === 'edit'){
    editStudent(argv.id, argv.fullname);
    console.log('Edit Successfully!');
    showStudents();
}
else{
    console.log('Command not found!');
    showStudents();
}

4. Tổng code của file yargs-demo.js

Sau đây là toàn bộ nội dung của file yargs-demo.js.

/*THƯ VIỆN STUDENT*/
var storage = require('node-persist');

storage.initSync({
    dir : "mydata",
    ttl : false
});

function getAllStudents()
{
    var students = storage.getItemSync('students');
    if (typeof students === "undefined"){
        return [];
    }
    
    return students;
}


function showStudents()
{
    var students = getAllStudents();
    for (var i = 0; i < students.length; i++)
    {
        console.log('Student: ' + students[i].fullname + "(" +students[i].id+ ")");
    }
}

function addStudent(studentId, studentName)
{
    var students = getAllStudents();
    students.push({
        id: studentId,
        fullname : studentName
    });
    
    storage.setItemSync('students', students);
}

function removeStudent(studentId)
{
    var students = getAllStudents();
    
    for (var i = 0; i < students.length; i++)
    {
        if (students[i].id === studentId){
            students.splice(i, 1);
        }
    }
    
    storage.setItemSync('students', students);
}

function editStudent(studentId, studentName)
{
    var students = getAllStudents();
    
    for (var i = 0; i < students.length; i++)
    {
        if (students[i].id === studentId){
            students[i].fullname = studentName;
        }
    }
    
    storage.setItemSync('students', students);
}


/*OPTIONS ACTION*/
var yargs = require('yargs');

var argv = yargs
                .command("list", "Get List Student", function(yargs){
                    // Nothing
                })
                .command('create', 'Create a Student', function(yargs){
                    return yargs.options({
                        id : {
                            demand : true,
                            type : "number"
                        },
                        fullname : {
                            demand : true,
                            type : "string"
                        }
                    });
                })
                .command('delete', 'Delete a Student', function(yargs){
                    return yargs.options({
                        id : {
                            demand : true,
                            type : "number"
                        }
                    });
                })
                .command('edit', 'Edit a Student', function(yargs){
                    return yargs.options({
                        id : {
                            demand : true,
                            type : "number"
                        },
                        fullname : {
                            demand : true,
                            type : "string"
                        }
                    });
                })
                .argv;

/*XỬ LÝ ACTION*/
// Lấy tên action
var action = argv._[0];

if (action === 'list'){
    showStudents();
}
else if (action === 'create'){
    addStudent(argv.id, argv.fullname);
    console.log('Add Successfully!');
    showStudents();
}
else if (action === 'delete'){
    removeStudent(argv.id);
    console.log('Delete Successfully!');
    showStudents();
}
else if (action === 'edit'){
    editStudent(argv.id, argv.fullname);
    console.log('Edit Successfully!');
    showStudents();
}
else{
    console.log('Command not found!');
    showStudents();
}

5. Chạy thử

Bây giờ bạn hãy bật NodeJS Prompt lên và chạy các lênh sau:

Hiển thị danh sách

node yargs-demo.js list

Thêm

node yargs-demo.js create --id 12 --fullname Chuong

Sửa

node yargs-demo.js edit --id 12 --fullname cuong

Xóa

node yargs-demo.js delete --id 12

Nếu bạn truyền không đầy đủ tham số thì nó sẽ thông báo lỗi lên màn hình và các action sẽ không được kích hoạt.

6. Lời kết

Như vậy là chúng ta đã thực hành xong ứng dụng quản lý học sinh bằng NodeJS, đây được coi là một hệ thống API dành  cho ứng dụng và các chương trình sẽ gửi request đến kèm các tham số tương ứng cho mỗi action.

Bài này mình dừng tại đây, hẹn gặp lại các bạn bài tiếp theo của series học NodeJS miễn phí này.

-------------------#####-------------------

DOWNLOAD TÀI LIỆU NODEJS

BÀI KẾ SAU
BÀI KẾ TIẾP

Nguồn: code24h.com

Bài liên quan

Bài tập áp dụng và thực hành C#

Mình đã viết một bài giới thiệu cơ bản về C# và một số bài áp dụng. Hôm nay muốn chia sẽ với các bạn một số bài tập nâng cao hơn tí trước khi chúng ta sẽ áp dụng vào trong lập trình web. Đầu tiên là mảng một chiều trong c#” static void Main(string[] args) { ...

Hoàng Hải Đăng viết 10:59 ngày 05/10/2018

[BÀI 10]Xây dựng menu đa cấp bằng CSS

Xây dựng menu đa cấp bằng CSS Cách xây dựng một menu đa cấp đơn giản bằng HTML chưa sử dụng CSS. Để xây dựng một menu trong HTML, chúng ta sử dụng thẻ <ul> và <li> Ví dụ : XHTML <body> <ul> < ...

Bùi Văn Nam viết 17:05 ngày 04/10/2018

Bài 10: Sử dụng MySQL DISTINCT để loại bỏ trùng lặp

Trong bài trước tôi đã trình bày về Lệnh SELECT truy vấn dữ liệu MySQL thì trong bài viết này, bạn sẽ học cách sử dụng mệnh đề MySQL DISTINCT với câu lệnh SELECT để loại bỏ các hàng trùng lặp trong một tập kết quả của câu truy vấn. Khi truy vấn dữ liệu từ một bảng, bạn có thể nhận được hàng trùng ...

Vũ Văn Thanh viết 16:37 ngày 01/10/2018

Tăng tốc độ của ứng dụng web nhờ áp dụng triết lý Kaizen

• Pinterest giảm 40% thời gian tải trang giúp tăng 15% lượt đăng ký mới • BBC cho biết họ đã mất thêm 10% người dùng cho mỗi giây tải trang • Báo cáo của Google cho thấy thời gian tải trang dưới 5 giây có tỉ lệ người xem trang cao hơn 70%, tỷ lệ thoát thấp hơn 35% và khả năng xem quảng cáo cao ...

Trần Trung Dũng viết 00:39 ngày 23/09/2018

Bài 13: Viết ứng dụng quản lý thành viên bằng PHP và MYSQL

Bài 13: Viết ứng dụng quản lý thành viên bằng PHP và MYSQL Ở các bài trước, chúng ta đã cùng tìm hiểu về việc thêm một thành viên và thiết lập trang đăng nhập vào hệ thống administrator . Ở bài này, chúng ta sẽ cùng nghiên cứu về ứng dụng quản trị các tài khoản. Hay nói ...

Tạ Quốc Bảo viết 15:10 ngày 19/09/2018
0