Lấy dữ liệu từ ActionHero data

  1. Truy vấn header data.connection.rawConnection.req.headers['authorization']
  2. Lấy params từ body data.params
  3. Bóc tách dữ liệu từ tham số data của ActionHero

    function url2params(url) {
    let params = [];
    let hashes = url.slice(url.indexOf('?') + 1).split('&');
    for(let i = 0; i < hashes.length; i++)
     {
         let hash = hashes[i].split('=');
         params[hash[0]] = hash[1];
     }
    return params;
    }
    
     console.log('method = ', data.connection.rawConnection.req.method);
     console.log('header = ',    data.connection.rawConnection.req.headers['authorization']);
     console.log('url = ', url2params(data.connection.rawConnection.req.url));
     console.log('params = ', data.params);
    

Tại sao dùng ActionHero

Đội phát triển Feathers cũng trả lời là họ không muốn hỗ trợ việc viết custom method https://github.com/feathersjs/feathers/issues/488 Giống như em anh đã viết custom method thực chất thêm router cho Express với app dùng Feathers thì cũng ok, nhưng nó không đẹp và phá cấu trúc.

Anh đã thử nghiệm ActionHero từ khi tạo issue hỏi Feather vì anh nghĩ rằng xác suất cao là Feather giữ nguyên con đường họ đã chọn.

Với action trong ActionHero thì anh thấy mấy điểm sau: 1- Hỗ trợ authenticate passport hoặc kiểu gì thì tùy mình. Bởi nó có tầng middle ware để dev lập trình can thiệp 2- Hỗ trợ hook: preprossessor (before) và post processor (after) 3- Hỗ trợ multi layer transport HTTP, TCP, nhiều cách giao tiếp REST, Primus, Socket.io. Xem kiến trúc của ActionHero thấy 4- Hỗ trợ logging ra console nhìn rất dễ đọc hay xuất ra Winston log 5- Khi định nghĩa một hàm end point chúng ta định nghĩa được nhiều thuộc tính:

  • name: tên hàm
  • parameter, tên - có bắt buộc hay không
  • description: mô tả để lập trình viên khác hiểu được và cũng xuất ra web front end
  • blockedConnectionType: do ActionHero cho phép nhiều kênh kết nối, nên ở đây, nó cho phép giới hạn để tăng cường bảo mật
  • version: cho phép API có nhiều version khác nhau, hỗ trợ các client cũ
  • authenticated: true or false
  • middleware là mảng các tên hàm sẽ xử lý bổ xung
  • có hàm validate và tiền xử lý các tham số truyền vào trước khi chạy hàm. Ví dụ validate email, số....

Sau đó chúng ta định nghĩa router để ánh xạ vào các end point này. Trong router, chúng ta có thể tùy chọn GET, POST, PUT, DELETE... mềm dẻo mà không quá rối rắm.

Cách này người ta gọi là declarative programming (lập trình khai báo). Nhìn vào route.js là thấy toàn bộ danh sách API. Nhưng bảo mật thế nào, tính chất của từng API function thế nào lại được định nghĩa trong từng file.

Có actionhero generate action --name=XYZ để tạo nhanh các action.

Với task, một dạng action chạy ở background anh chưa thí nghiệm nhưng nó cũng rất thú vị. Gửi email, run report trong background

Các ActionHero có thể gọi lẫn nhau server - server communication https://github.com/evantahler/actionhero-client

ActionHero đã được dùng trong Production của TaskRabbit, Samsung, GameRiot... Tốc độ đáp ứng của đội developer ActionHero khá tốt, anh hỏi, họ trả lời rất chi tiết

Anh đã deploy ActionHero vào một docker image run được ngon lành. Thanks Huy hỗ trợ. Giờ thử bật nhiều ActionHero server lên cho chúng gọi nhau. Có một Rancher để quản lý tập trung các trạng thái docker, start, stop. Nếu có một site tập hợp tất cả các API document của ActionHero hiện thị tập trung thì quá đẹp. Như vậy trong một rừng các microservice, chúng ta có một bản đồ cập nhất các API. ActionHero action - task có đầu mối xuất thông tin này.

Anh chưa dùng Seneca quá sâu, nhưng anh nghĩ trước mắt chúng ta thử build một số service pattern trên ActionHero. Seneca back up làm second choice cho đến khi chúng ta phát hiện những điểm không thể chấp nhận được ở ActionHero kiểu như với Featherjs.


Where can I write spec and what I learned from ActionHero + Passport + OAuth2 so members in this Slack can comment? As far as I understand, we can write middle-ware pre-processor function. In this pre-processor function, we call Passport.authenticate. In Express world, there are 2 parameters req and res. In ActionHero, we have data parameter that has param

results matching ""

    No results matching ""