└── todos ├── config.ts ├── db ├── handlers ├── index.ts ├── middlewares ├── models ├── routing.ts └── services如你所见 , 这个目录结构看起来像一个小型 Node.js Web 应用程序 。下一步 , 我们来创建 Todo 项目的入口文件 。步骤二:创建入口文件index.ts
import { Application } from "https://deno.land/x/oak/mod.ts";import { APP_HOST, APP_PORT } from "./config.ts";import router from "./routing.ts";import notFound from "./handlers/notFound.ts";import errorMiddleware from "./middlewares/error.ts";const app = new Application();app.use(errorMiddleware);app.use(router.routes());app.use(router.allowedMethods());app.use(notFound);console.log(`Listening on ${APP_PORT}...`);await app.listen(`${APP_HOST}:${APP_PORT}`);在第一行代码中 , 我们使用了 Deno 所提供的功能特性 , 即直接从网络上导入模块 。除此之外 , 这里没有什么特别的 。我们创建一个应用程序 , 添加中间件 , 路由 , 最后启动服务器 。整个流程就像开发普通的 Express/Koa 应用程序一样 。步骤三:创建配置文件config.ts
const env = Deno.env.toObject();export const APP_HOST = env.APP_HOST || "127.0.0.1";export const APP_PORT = env.APP_PORT || 3000;export const DB_PATH = env.DB_PATH || "./db/todos.json";【了不起的 Deno 实战教程】为了提高项目的灵活性 , 我们支持从环境中读取配置信息 , 同时我们也为每个配置项目提供了相应的默认值 。其中 Deno.env() 相当于Node.js 平台中的 process.env 。步骤四:添加 Todo 模型models/todo.ts
export interface Todo { id: number; userId: number; title: string; completed: boolean;}在 Todo 模型中 , 我们定义了 id、userId、title 和 completed 四个属性 , 分别表示 todo 编号、用户编号、todo 标题和 todo 完成状态 。步骤五:添加路由routing.ts
import { Router } from "https://deno.land/x/oak/mod.ts";import getTodos from "./handlers/getTodos.ts";import getTodoDetail from "./handlers/getTodoDetail.ts";import createTodo from "./handlers/createTodo.ts";import updateTodo from "./handlers/updateTodo.ts";import deleteTodo from "./handlers/deleteTodo.ts";const router = new Router();router .get("/todos", getTodos) .get("/todos/:id", getTodoDetail) .post("/todos", createTodo) .put("/todos/:id", updateTodo) .delete("/todos/:id", deleteTodo);export default router;同样 , 没有什么特别的 , 我们创建一个 router 并添加 routes 。它看起来几乎与 Express.js 应用程序一模一样 。步骤六:添加路由处理器handlers/getTodos.ts
import { Response } from "https://deno.land/x/oak/mod.ts";import { getTodos } from "../services/todos.ts";export default async ({ response }: { response: Response }) => { response.body = await getTodos();};getTodos 处理器用于返回所有的 Todo 。如果你从未使用过 Koa , 则 response 对象类似于 Express 中的 res 对象 。在 Express 应用中我们会调用 res 对象的 json 或 send 方法来返回响应 。而在 Koa/Oak 中 , 我们需要将响应值赋给 response.body 属性 。
推荐阅读
- 犀牛书作者:最该忘记的JavaScript特性
- 最详细的软件测试流程,一看就懂
- 直通车自定义溢价多少合适 直通车自定义溢价多少合适
- 极速推有效果吗 极速推什么时候出来的
- 不同颜色的硬盘到底什么区别 – 蓝盘、黑盘、红盘、紫盘、金盘
- 炒青绿茶的功效,绿茶的分类先容
- 茶叶的成分及功效,茶叶的多酚类化合物介绍
- 等级信阳毛尖的价格,信阳毛尖的价格是多少
- 茶籽油的功效与作用,青茶的功效与作用是什么
- 得天独厚的曼松贡茶,曼松古树为何价高
