项目基本优化

业务与服务拆分

为了降低耦合性,我们将 应用业务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()

:::

通过这种拆分,我们得到了一个结构清晰、职责分明的应用架构。每个部分都只关注自己的职责,使得代码更加模块化,易于维护和扩展。