Cách sử dụng Yargs NodeJS

Cách sử dụng Yargs NodeJS là vấn đề được nhiều lập trình viên quan tâm, bởi những kiến thức trên trường lớp là không đủ, vì vậy bài Cách sử dụng Yargs NodeJS sẽ chia sẻ tới bạn nhiều thông tin hữu ích

Mọi người vẫn hỏi tôi về việc học lập trình nói chung và NodeJS nói riêng có cần năng khiếu hay quá khó để tiếp cận hay không. Thì tôi có thể trả lời rằng, học lập trình cũng như việc bạn học tiếng Anh hay bất kỳ một ngôn ngữ khác, bởi lập trình...là ngôn ngữ của máy tính, để máy tính đọc và máy tính thực hiện theo yêu cầu của mình, bạn thích là học được.


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à idfullname, id là kiểu intfullname 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.

Hy vọng với bài viết về Cách sử dụng Yargs NodeJS đã giải đáp giúp bạn phần nào về kiến thức lập trình NodeJS. Như tôi đã nói, ngôn ngữ lập trình không quan trọng bằng tư duy giải thuật, tư duy logic để giải quyết vấn đề.

Với những năm trước đây, lập trình viên là một cái nghề khó và kén chọn người học, đồng nghĩa với việc thu nhập hàng tháng của các lập trình viên luôn cao. Còn những năm gần đây, thì lập trình là môn học phổ thông, và ai cũng nên học một ngôn ngữ lập trình nào đó.

Nếu bạn còn bất kỳ câu hỏi nào trong việc học lập trình online, hãy gửi yêu cầu cho tôi qua email hoidapcode.com@gmail.com hoặc để lại comment bên dưới, tôi sẽ giải đáp trong vòng 24 giờ!

Blog hoidapcode.com là blog được tổng hợp tự động các bài học, thông tin về lập trình trên mạng internet. Nếu bạn có ý kiến hoặc đóng góp về bài viết này, hãy liên hệ với tôi!