1.7 目录结构调整

113 阅读1分钟

我们新增了几个文件,现在有些混乱了,做一次目录结构调整。

deps.ts

项目根目录下,新建deps.ts文件,把我们目前用到的外部依赖库放进去:

export { Application, Router } from "https://deno.land/x/oak@v11.1.0/mod.ts";

export { nanoid } from "https://deno.land/x/nanoid@v3.0.0/mod.ts";

如果这些外部依赖版本有变更,只需要修改这一个文件就可以了。不要在其它文件加写带版本的文件,养成良好的习惯,因为你很可能在不同文件中引入不同的版本,那简直灾难。

user目录

新建src/user目录,其中2个文件,把user.service.ts移动进来,另新建一个user.route.ts,内容如下:

import { Router } from "../../deps.ts";
import { userService } from "./user.service.ts";

export const userRouter = new Router();

userRouter
  .get("/", async (context) => {
    context.response.body = await userService.getAll();
  })
  .get("/:id", async (context) => {
    const id = context.params.id;
    const user = await userService.getUserById(id);
    if (user) {
      context.response.body = user;
    } else {
      context.response.status = 404;
      context.response.body = "user not found";
    }
  })
  .post("/", async (context) => {
    const result = context.request.body({
      type: "json",
    });
    const value = await result.value;
    const id = await userService.addUser(value);
    context.response.body = id;
  })
  .put("/:id", async (context) => {
    const id = context.params.id;
    const result = context.request.body({
      type: "json",
    });
    const value = await result.value;
    const { modifiedCount } = await userService.updateUser(id, value);
    context.response.body = modifiedCount;
  })
  .delete("/:id", async (context) => {
    const id = context.params.id;
    const deletedCount = await userService.removeUser(id);
    context.response.body = deletedCount;
  });

其实是把main.ts中路由拿到这里。

routes.ts

新建src/routes.ts,内容如下:

import { Router } from "../deps.ts";
import { userRouter } from "./user/user.route.ts";

const router = new Router();
// 重点是下面这句,把/user前缀与userRouter绑定到一起
router.use("/user", userRouter.routes());

router.get("/", (context) => {
  context.response.body = "hello world";
});

export { router };

mod.ts

最后src/main.ts中就剩下这一段:

import { Application } from "../deps.ts";
import { router } from "./routes.ts";

const app = new Application();
app.use(router.routes());
app.use(router.allowedMethods());

app.addEventListener("listen", ({ port }) => {
  console.log(`Listening on: http://localhost:${port}`);
});

await app.listen({ port: 8000 });

作业

  1. 验证重构结果。
  2. 思考下,目前代码层面还有什么致命缺陷?