- vừa được xem lúc

[Nodejs] Koajs Bài 2: Routing trong Koajs

0 0 21

Người đăng: Trần Hải Đăng

Theo Viblo Asia

Như chúng ta đã biết, trừ những trang web chỉ có duy nhất một endpoint(một trang), thì Routing là một công việc tất yếu. Và đương nhiên, Routing cũng là một phần quan trọng trong Koajs, nhưng chức năng này lại không tích hợp sẵn trong Koa. Vì vậy hôm nay chúng ta sẽ tìm hiểu xem làm thế nào để phân trang trong Koa.js.

Phân trang thủ công

Dù nói là không tích hợp sẵn, nhưng Koajs hoàn toàn có những tính năng để chúng ta tự làm chức năng Routing. Dưới đây là một ví dụ đơn giản:

const Koa = require("koa");
const app = new Koa(); function getParams(href) { params = href.split('/').slice(3); //cắt params từ url, vì format url(http(s)://subdomain.secLevDomain.topLevDomain/param1/param2/...) //nên khi chúng ta split ra bằng "/" thì phần tử thứ 3 trở đi sẽ là params return params.filter((i) => i.length > 0); // lọc ra những phần tử trống rồi trả về
} app.use(async (ctx, next) => { params = getParams(ctx.request.href); // gọi hàm lấy params if (params[0] == "xem") { //kiểm tra param đầu tiên if (params[1] == "san-pham") { //kiểm tra param thứ 2 ctx.body = params[2]; //thay đổi body response(nội dung trả về) thành param thứ 3 } else { await next(); //đi đến middleware tiếp theo } } else { await next(); //đi đến middleware tiếp theo }
}); app.use(async ctx => { ctx.body = "<h1>404</h1>"; // trả về trang 404
}) app.listen(3000); //chạy app ở port 3000

Kết quả: Nhìn vào đoạn code ở trên, ta thấy mọi thứ vẫn ổn, nhỉ? Tất nhiên là nếu chỉ đơn giản thì nó vẫn sử dụng được, nhưng rõ ràng là quá dài dòng và không hiệu quả. Nếu như cần đến param thứ 4, thứ 5 thì sẽ có rất nhiều if, else, khó debug(ta có thể lấy toàn bộ params thành một string, nhưng nếu như thế thì router phải theo một format nhất định, và ta cũng không thể dùng param động mà cần xử lí thêm). Dĩ nhiên ta có thể tối ưu nó bằng cách tách từng param là một middleware, nhưng nó vẫn chưa hiệu quả. Vì thế ta mới cần một thứ thần thánh, THƯ VIỆN.

Phân trang bằng thư viện

Một thư viện router được rất nhiều người sử với Koajs là koa-router. Cài đặt:

yarn add @koa/router
#hoặc
npm i @koa/router

Khởi tạo router:

const Router = require("@koa/router");
const router = new Router();

Phân trang theo ví dự ở trên:

router.get('/xem/san-pham/:id', async (ctx, next) => { ctx.body = ctx.params.id;
});

Gắn vào app:


app.use(async (ctx, next) => { ctx.body = "<h1>404</h1>"; await next();
}); app .use(router.routes()) .use(router.allowedMethods()); //Ở đây 404 nằm ở trên vì nếu không match route koa-router sẽ không next(), cũng như không trả về gì
//Còn nếu ta next() trong middleware thì kq sẽ luôn là 404

Kết quả vẫn giống hệt như trên, nhưng code đã ngắn gọn và dễ hiểu hơn rất nhiều.

Ví dụ trong dự án KoaShop

Path của từng trang:

  • Trưng bày sản phẩm: /
  • Xem chi tiết sản phẩm: /view/:id
  • Trang tìm kiếm: /search
  • Admin: /admin
    Code:
const Koa = require("koa");
const app = new Koa(); const Router = require("@koa/router");
const router = new Router(); router.get('/', ctx => ctx.body = "Home");
router.get('/view/:id', ctx => ctx.body = ctx.params.id);
router.get('/search', ctx => ctx.body = "Search");
router.get('/admin', ctx => ctx.body = "Admin"); app.use(async (ctx, next) => { ctx.body = "<h1>404</h1>"; await next();
}) app .use(router.routes()) .use(router.allowedMethods()); app.listen(3000, () => console.log("App is running"));

Bình luận

Bài viết tương tự

- vừa được xem lúc

Áp dụng kiến trúc 3 Layer Architecture vào project NodeJS

The problem encountered. Các framework nodejs phổ biết như Express cho phép chúng ta dễ dàng tạo ra Resful API xử lí các request từ phía client một cách nhanh chóng và linh hoạt.

0 0 80

- vừa được xem lúc

Tìm hiểu về NestJS (Phần 2)

Trong bài viết trước, mình đã giới thiệu về NestJS và các thành phần cơ bản của framework này cũng như xây dựng demo một api bằng NestJS. Như mình đã giới thiệu, NestJS có một hệ sinh thái hỗ trợ cho chúng ta trong quá trình phát triển mà các framework khác như Express, Fastify,... phải tự build hoặ

0 0 170

- vừa được xem lúc

Xây dựng một REST API Skeleton với Node.js

Node.js đang dần trở nên phổ biến với những ứng dụng dạng microservice hay REST Api bới hiệu năng cực nhanh và tính bất đồng bộ của chúng.

0 0 44

- vừa được xem lúc

Xây dựng Restful Api bằng Nodejs

Mở đầu. Thực ra là không có mở đầu gì đâu mà hay làm ngay bước tiếp theo ! .

0 0 46

- vừa được xem lúc

CORS là gì? CORS với Nodejs

CORS (hay Cross-origin resource sharing) là gì . . Lỗi cors trên trình duyệt:. .

0 0 72

- vừa được xem lúc

[K8S] Phần 15 - Triển khai ứng dụng NodeJS lên K8S

Giới thiệu. Trong các phần trước mình đã giới thiệu về cách dựng một hệ thống Kubernetes Cluster với khá đầy đủ các thành phần cần thiết như:.

0 0 41