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