我们新增了几个文件,现在有些混乱了,做一次目录结构调整。
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 });
作业
- 验证重构结果。
- 思考下,目前代码层面还有什么致命缺陷?