Hello world với Deno

Chào mn, qua thời gian ngắn tìm hiểu deno, bản thân mình thấy tài liệu dành cho deno khá ít, nên hôm nay mình sẽ làm series cơ bản về deno. Chúng ta sẽ đi từ cơ bản hello world đến cách viết API cơ bản cho 1 ứng dụng nho nhỏ. Thời gian mình

Chào mn, qua thời gian ngắn tìm hiểu deno, bản thân mình thấy tài liệu dành cho deno khá ít, nên hôm nay mình sẽ làm series cơ bản về deno. Chúng ta sẽ đi từ cơ bản hello world đến cách viết API cơ bản cho 1 ứng dụng nho nhỏ. Thời gian mình tìm hiểu khá ngắn, nên bài viết có thể thiếu sót nhiều, mong mn thông cảm và góp ý.

Mình sẽ bỏ qua các bước giới thiệu và install deno (vì mấy cái này có khá nhiều trên mạng), ở loạt series mình sẽ dùng deno 1.14.1 và Webstorm(https://www.jetbrains.com/webstorm/)
Để viết được hello world với Deno thì có khá nhiều cách, ở trang chủ https://deno.land/ giới thiệu cách truyền thống nhất của deno, các bạn có thể qua đó tham khảo. Ở đây mình sẽ hướng dẫn viết API bằng oak(https://github.com/oakserver/oak), tại thời điểm bài viết, oak đang ở phiên bản 9.0.1 và mình cũng sẽ sử dụng nó luôn

Đầu tiên chúng ta cần import class Aplication của oak bằng cách

import{ Application }from"https://deno.land/x/[email protected]/mod.ts";

Trong tài liệu của oak có viết : Application là lớp quản lý máy chủ HTTP, middleware, xử lý các lỗi xảy ra trong quá trình request của người dùng.

Hai phương thức được sử dụng nhiều trong lớp Application là use()listen() . Middleware, request, response sẽ được thêm vào ở method use(), method listen() sẽ khởi động server và bắt đầu xử lý các api được thêm ở use()

Đầu tiên các bạn tạo một project mới ở Webstorm, tạo một file mới có tên server.ts:

import{ Application }from"https://deno.land/x/[email protected]/mod.ts";const app =newApplication();

app.use((ctx)=>{
    ctx.response.body ="Hello World!";});await app.listen({ port:8888});

Đoạn code này khá dễ hiểu , đầu tiên chúng ta tạo một instance của Application(), lớp Context (ctx) của oak có tác dụng lắng nghe request của người dùng dựa vào ctx.request, và trả về cho người dùng response : ctx.response ở đây chúng ta trả về mỗi từ “Hello World!”, Tiếp đến chúng ta sẽ cho server lắng nghe ở cổng 8888.

Tiếp đến chúng ta cd vào thư mục chứa file server và chạy câu lệnh
deno run --allow-net server.ts

Khi mở localhost:8888 chúng ta sẽ thấy kết quả của mình 😄

Nhưng chắn chắn để triển khai 1 dự án nho nhỏ, chúng ta không thể nào dồn hết tất cả code vào file server được 😄, ta sẽ chia dần theo module như sau

Lần lượt ta có helloController.ts sẽ chứa các handler xử lý liên quan đến hello(mình ví dụ ra thôi, sau này chúng ta xây dựng lớp này sẽ biến mất)

import{Context}from"https://deno.land/x/[email protected]/mod.ts";exportconsthelloHandler=async(context: Context)=>{
    context.response.body ="Hello world";}

Tiếp đến router.ts sẽ chứa các api của chúng ta bằng cách gọi các handler tương ứng trong package controllers:

import{Router}from"https://deno.land/x/[email protected]/mod.ts";import{helloHandler}from"../controllers/helloController.ts";let router =newRouter();
router.get("/", helloHandler);exportdefault router;

cuối cùng server.ts chỉ gọi lại và sử dụng router mà thôi

import{Application}from"https://deno.land/x/[email protected]/mod.ts";import router from"./router/router.ts";const app =newApplication();

app.use(router.routes());
app.use(router.allowedMethods());await app.listen({port:8888});

Kết quả sau khi chạy project vẫn như vậy, chỉ là chúng ta chia nhỏ module mà thôi.

Ở bài tiếp theo chúng ta sẽ đi dần đến làm việc với controller, router và tương tác với mongodb

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 đầ