[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

Thay đổi Package Name của Android Studio dể dàng với plugin APR

Nếu bạn đang gặp khó khăn hoặc bế tắc trong việc thay đổi package name trong And

Lỗi không Update Meta_Value Khi thay thế hình ảnh cũ bằng hình ảnh mới trong WordPress

Mã dưới đây hoạt động tốt có 1 lỗi không update được postmeta ” meta_key=

Bài 1 – React Native DevOps các khái niệm và các cài đặt căn bản

Hướng dẫn setup jenkins agent để bắt đầu build mobile bằng jenkins cho devloper an t

Chuyển đổi từ monolith sang microservices qua ví dụ

1. Why microservices? Microservices là kiến trúc hệ thống phần mềm hướng dịch vụ,