了不起的 Deno 实战教程


了不起的 Deno 实战教程

文章插图
 
作者:semlinker
转发链接:https://mp.weixin.qq.com/s/J4A5EYL7Kk8cx_X7Kh36Iw
前言最近Deno正式版已经发布了 。有的程序员说Deno可以完全取代Node.js,有的程序员说比Node.js 有优势 , 众说风云 。不管三七二十一 , 我们一起了解了解 。对 Deno 还不了解的读者 , 建议先阅读本文文“「干货」通俗易懂的Deno 入门教程” 这篇文章 。
Deno 正式发布 , 彻底弄明白和 node 的区别
「干货」通俗易懂的Deno 入门教程
一、Oak 简介相信接触过 Node.js 的读者对 Express、Hapi、Koa 这些 Web 应用开发框架都不会陌生 , 在 Deno 平台中如果你也想做 Web 应用开发 , 可以考虑直接使用以下现成的框架:
  • deno-drash:A REST microframework for Deno with zero dependencies 。
  • deno-express:Node Express way for Deno 。
  • oak:A middleware framework for Deno's net server。
  • pogo:Server framework for Deno 。
  • servest:A progressive http server for Deno 。
写作本文时 , 目前 Star 数最高的项目是 Oak , 加上我的一个 Star , 刚好 720 。下面我们来简单介绍一下 Oak:
A middleware framework for Deno's http server, including a router middleware.
This middleware framework is inspired by Koa and middleware router inspired by koa-router.
很显然 Oak 的的灵感来自于 Koa , 而路由中间件的灵感来源于 koa-router 这个库 。如果你以前使用过 Koa 的话 , 相信你会很容易上手 Oak 。不信的话 , 我们来看个示例:
import { Application } from "https://deno.land/x/oak/mod.ts";const app = new Application();app.use((ctx) => {  ctx.response.body = "Hello Semlinker!";});await app.listen({ port: 8000 });以上示例对于每个 HTTP 请求 , 都会响应 "Hello Semlinker!" 。只有一个中间件是不是感觉太 easy 了 , 下面我们来看一个更复杂的示例(使用多个中间件):
import { Application } from "https://deno.land/x/oak/mod.ts";const app = new Application();// Loggerapp.use(async (ctx, next) => {  await next();  const rt = ctx.response.headers.get("X-Response-Time");  console.log(`${ctx.request.method} ${ctx.request.url} - ${rt}`);});// Timingapp.use(async (ctx, next) => {  const start = Date.now();  await next();  const ms = Date.now() - start;  ctx.response.headers.set("X-Response-Time", `${ms}ms`);});// Hello World!app.use((ctx) => {  ctx.response.body = "Hello World!";});await app.listen({ port: 8000 });为了更好地理解 Oak 中间件流程控制 , 我们来一起回顾一下 Koa 大名鼎鼎的 “洋葱模型”:
了不起的 Deno 实战教程

文章插图
 
koa-onion-model
从 “洋葱模型” 示例图中我们可以很清晰的看到一个请求从外到里一层一层的经过中间件 , 响应时从里到外一层一层的经过中间件 。
上述代码成功运行后 , 我们打开浏览器 , 然后访问 http://localhost:8000/URL 地址 , 之后在控制台会输出以下结果:
?  learn-deno deno run --allow-net oak/oak-middlewares-demo.tsGET http://localhost:8000/ - 0msGET http://localhost:8000/favicon.ico - 0ms好了 , 介绍完 Oak 的基本使用 , 接下来我们开始进入正题 , 即使用 Oak 开发 REST API 。
二、Oak 实战本章节我们将介绍如何使用 Oak 来开发一个 Todo REST API , 它支持以下功能:
  • 添加新的 Todo
  • 显示 Todo 列表
  • 获取指定 Todo 的详情
  • 移除指定 Todo
  • 更新指定 Todo
小伙伴们 , 你们准备好了没?让我们一起步入 Oak 的世界!
步骤一:初始化项目结构首先我们在 learn-deno 项目中 , 创建一个新的 todos 目录 , 然后分别创建以下子目录和 TS 文件: