+2

[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 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).


All Rights Reserved

Viblo
Let's register a Viblo Account to get more interesting posts.