项目基本优化
业务与服务拆分
为了降低耦合性,我们将 应用业务
和 HTTP服务
进行拆分。以下是具体的代码示例:
1// server/app/index.js
2const Koa = require("koa")
3const Router = require("koa-router")
4const app = new Koa()
5const router = new Router()
6
7router.get("/", (ctx) => {
8 ctx.body = "Hello, Koa!"
9})
10
11app.use(router.routes()).use(router.allowedMethods())
12
13module.exports = app
1// server/main.js
2const { APP_PORT } = require("./env/index.js")
3const app = require("./app/index.js")
4
5app.listen(APP_PORT, () => {
6 console.log(`Server is running at http://localhost:${APP_PORT}`)
7})
:::
路由拆分
路由的核心职责就是识别不同的URL,并据此将请求正确地分派到相应的处理函数。
为了实现更清晰的架构和更高的代码维护性,我们对路由的职责进行了进一步细分:
1// server/app/index.js
2// 应用业务负责整合路由器
3const Koa = require("koa")
4const app = new Koa()
5
6const userRouter = require("../router/user.route.js")
7
8app.use(userRouter.routes()).use(userRouter.allowedMethods())
9
10module.exports = app
1// server/router/user.route.js
2// 路由器负责定义应用的路由,即 URL 路径和对应的处理函数。
3const Router = require("koa-router")
4const { register } = require("../controller/user.controller.js")
5
6const router = new Router({
7 prefix: "/users",
8})
9
10router.get("/", register)
11
12module.exports = router
1// server/controller/user.controller.js
2// 控制器包含业务逻辑,负责处理具体的请求
3class UserController {
4 async register(ctx, next) {
5 ctx.body = "注册成功"
6 }
7}
8
9module.exports = new UserController()
:::
通过这种拆分,我们得到了一个结构清晰、职责分明的应用架构。每个部分都只关注自己的职责,使得代码更加模块化,易于维护和扩展。