[Nodejs] Koajs Bài 1: Hello world với Koajs

Trong tất cả mọi ngôn ngữ lập trình, hầu hết chúng ta đều bắt đầu bằng một chương trình Hello world đơn giản. Trong bài viết hôm nay, chúng ta sẽ cùng nhau viết một chương trình hello world và điểm lại những kiến thức trong đoạn code. Hello world với Koajs Đầu tiên, tạo

Trong tất cả mọi ngôn ngữ lập trình, hầu hết chúng ta đều bắt đầu bằng một chương trình Hello world đơn giản. Trong bài viết hôm nay, chúng ta sẽ cùng nhau viết một chương trình hello world và điểm lại những kiến thức trong đoạn code.

Hello world với Koajs

Đầu tiên, tạo một file index.js trong thư mục KoaShop:
ảnh.png
Trong index.js:

const Koa = require("koa");
const app = new Koa();

app.use(async ctx => {
    ctx.body = "Hello world";
});

app.listen(3000);

Trong đoạn code trên:

  • const Koa = require("koa");: import thư viện koa.
  • const app = new Koa();: khởi tạo app.
  • app.use(async ctx => { return ctx.body = "Hello world"; });: gắn một middleware(hàm sẽ được gọi khi có 1 request gửi tới) vào ứng dụng.
  • app.listen(3000);: khởi chạy app ở port 3000(http://localhost:3000).
    Để trực quan hơn, các bạn mở terminal để chạy app:
>> yarn nodemon index.js #yarn
#hoặc
>> nodemon index.js #npm

Và mở vào http://localhost:3000, kết quả sẽ như sau:
ảnh.png

Chi tiết hơn về middleware trong Koajs

Trong chương trình bên trên, chúng ta có một middleware đơn giản là một async function nhận vào tham số ctx(tương đương với this, trong các version mới của koajs hầu hết sử dụng arrow function). Ctx vừa là request, vừa là response và nó cũng chứa rất nhiều methods hữu ích để viết web app và APIs. Tìm hiểu thêm.
Ngoài ctx, hầu hết ứng middleware trong một Koa app đều có thêm một tham số nữa là next, dùng để tiếp tục đi đến middleware tiếp theo, ví dụ như đoạn code dưới đây:

app.use(async (ctx, next) => {
    ctx.body = "Hello world";
    await next();
});

app.use(async (ctx) => {
    ctx.body = "Hello world 2";
})

Kết quả:
ảnh.png
Nhưng nếu bây giờ ta xóa mất dòng await next(); thì mọi người đoán sẽ ra thế nào?

app.use(async (ctx, next) => {
    ctx.body = "Hello world";
});

app.use(async (ctx) => {
    ctx.body = "Hello world 2";
})

Kết quả:
ảnh.png
Như vậy, ta có thể thấy rằng các middleware sẽ được gọi như một dòng thác, chảy từ trên xuống, nhưng nếu bằng cách nào đó ngăn dòng nước lại thì nó sẽ dừng hẳn, những middleware ở sau sẽ không được gọi, nên thường ta chỉ dừng khi thực sự cần thiết hoặc là khi handle error(tốt nhất là ở middleware đầu tiên).

Nguồn: viblo.asia

Bài viết liên quan

WebP là gì? Hướng dẫn cách để chuyển hình ảnh jpg, png qua webp

WebP là gì? WebP là một định dạng ảnh hiện đại, được phát triển bởi Google

Điểm khác biệt giữa IPv4 và IPv6 là gì?

IPv4 và IPv6 là hai phiên bản của hệ thống địa chỉ Giao thức Internet (IP). IP l

Check nameservers của tên miền xem website trỏ đúng chưa

Tìm hiểu cách check nameservers của tên miền để xác định tên miền đó đang dùn

Mình đang dùng Google Domains để check tên miền hàng ngày

Từ khi thông báo dịch vụ Google Domains bỏ mác Beta, mình mới để ý và bắt đầ