From ed60efbaf8d39ffe5cbdbd05968ac0c116aed2e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B0=A2=E4=BA=9A=E6=98=95?= <1549469775@qq.com> Date: Fri, 20 Jun 2025 14:59:46 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E9=87=8D=E6=9E=84=E6=8E=A7=E5=88=B6?= =?UTF-8?q?=E5=99=A8=EF=BC=8C=E7=BB=9F=E4=B8=80=E6=96=B9=E6=B3=95=E8=B0=83?= =?UTF-8?q?=E7=94=A8=E6=96=B9=E5=BC=8F=EF=BC=8C=E4=BC=98=E5=8C=96=E8=B7=AF?= =?UTF-8?q?=E7=94=B1=E6=B3=A8=E5=86=8C=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/controllers/AuthController.js | 59 +++++++++++++++--------------- src/controllers/JobController.js | 66 +++++++++++++++------------------- src/controllers/Page/HtmxController.js | 34 +++++++++++------- src/controllers/Page/PageController.js | 30 ++++++++++------ src/controllers/StatusController.js | 30 +++++++++------- 5 files changed, 115 insertions(+), 104 deletions(-) diff --git a/src/controllers/AuthController.js b/src/controllers/AuthController.js index ca0605c..1d0586f 100644 --- a/src/controllers/AuthController.js +++ b/src/controllers/AuthController.js @@ -1,44 +1,45 @@ import UserService from "services/UserService.js" import { formatResponse } from "utils/helper.js" +import Router from "utils/router.js" -const userService = new UserService() +class AuthController { + constructor() { + this.userService = new UserService() + } -export const hello = async (ctx) => { - ctx.body = formatResponse(true, "Hello World") -} + async hello(ctx) { + ctx.body = formatResponse(true, "Hello World") + } -export const getUser = async (ctx) => { - const user = await userService.getUserById(ctx.params.id) - ctx.body = formatResponse(true, user) -} + async getUser(ctx) { + const user = await this.userService.getUserById(ctx.params.id) + ctx.body = formatResponse(true, user) + } -export const register = async (ctx) => { - try { + async register(ctx) { const { username, email, password } = ctx.request.body - const user = await userService.register({ username, email, password }) + const user = await this.userService.register({ username, email, password }) ctx.body = formatResponse(true, user) - } catch (err) { - ctx.body = formatResponse(false, null, err.message) } -} -export const login = async (ctx) => { - try { + async login(ctx) { const { username, email, password } = ctx.request.body - const result = await userService.login({ username, email, password }) + const result = await this.userService.login({ username, email, password }) ctx.body = formatResponse(true, result) - } catch (err) { - ctx.body = formatResponse(false, null, err.message) } -} -// 路由注册示例 -import Router from "utils/router.js" -export function createRoutes() { - const router = new Router({ prefix: "/api" }) - router.get("/hello", hello, { auth: false }) - router.get("/user/:id", getUser) - router.post("/register", register) - router.post("/login", login) - return router + /** + * 路由注册 + */ + static createRoutes() { + const controller = new AuthController() + const router = new Router({ prefix: "/api" }) + router.get("/hello", controller.hello.bind(controller), { auth: false }) + router.get("/user/:id", controller.getUser.bind(controller)) + router.post("/register", controller.register.bind(controller)) + router.post("/login", controller.login.bind(controller)) + return router + } } + +export default AuthController diff --git a/src/controllers/JobController.js b/src/controllers/JobController.js index 3348cf8..a4a3f0a 100644 --- a/src/controllers/JobController.js +++ b/src/controllers/JobController.js @@ -1,56 +1,46 @@ // Job Controller 示例:如何调用 service 层动态控制和查询定时任务 import JobService from "services/JobService.js" import { formatResponse } from "utils/helper.js" +import Router from "utils/router.js" -const jobService = new JobService() +class JobController { + constructor() { + this.jobService = new JobService() + } -export const list = async (ctx) => { - try { - const data = jobService.listJobs() + async list(ctx) { + const data = this.jobService.listJobs() ctx.body = formatResponse(true, data) - } catch (err) { - ctx.body = formatResponse(false, null, err.message || "获取任务列表失败") } -} -export const start = async (ctx) => { - const { id } = ctx.params - try { - jobService.startJob(id) + async start(ctx) { + const { id } = ctx.params + this.jobService.startJob(id) ctx.body = formatResponse(true, null, null, `${id} 任务已启动`) - } catch (err) { - ctx.body = formatResponse(false, null, err.message || "启动任务失败") } -} -export const stop = async (ctx) => { - const { id } = ctx.params - try { - jobService.stopJob(id) + async stop(ctx) { + const { id } = ctx.params + this.jobService.stopJob(id) ctx.body = formatResponse(true, null, null, `${id} 任务已停止`) - } catch (err) { - ctx.body = formatResponse(false, null, err.message || "停止任务失败") } -} -export const updateCron = async (ctx) => { - const { id } = ctx.params - const { cronTime } = ctx.request.body - try { - jobService.updateJobCron(id, cronTime) + async updateCron(ctx) { + const { id } = ctx.params + const { cronTime } = ctx.request.body + this.jobService.updateJobCron(id, cronTime) ctx.body = formatResponse(true, null, null, `${id} 任务频率已修改`) - } catch (err) { - ctx.body = formatResponse(false, null, err.message || "修改任务频率失败") } -} -// 路由注册示例 -import Router from "utils/router.js" -export function createRoutes() { - const router = new Router({ prefix: "/api/jobs" }) - router.get("/", list) - router.post("/start/:id", start) - router.post("/stop/:id", stop) - router.post("/update/:id", updateCron) - return router + static createRoutes() { + const controller = new JobController() + const router = new Router({ prefix: "/api/jobs" }) + router.get("/", controller.list.bind(controller)) + router.post("/start/:id", controller.start.bind(controller)) + router.post("/stop/:id", controller.stop.bind(controller)) + router.post("/update/:id", controller.updateCron.bind(controller)) + return router + } } + +export default JobController diff --git a/src/controllers/Page/HtmxController.js b/src/controllers/Page/HtmxController.js index edf3cbc..3df03f3 100644 --- a/src/controllers/Page/HtmxController.js +++ b/src/controllers/Page/HtmxController.js @@ -1,16 +1,24 @@ -export const Index = async ctx => { - return await ctx.render("index", { name: "bluescurry" }) -} +import Router from "utils/router.js" -export const Page = (name, data) => async ctx => { - return await ctx.render(name, data) -} +class HtmxController { + async index(ctx) { + return await ctx.render("index", { name: "bluescurry" }) + } -import Router from "utils/router.js" -export function createRoutes() { - const router = new Router({ auth: "try" }) - router.post("/clicked", async ctx => { - return await ctx.render("htmx/fuck", { title: "HTMX Clicked" }) - }) - return router + page(name, data) { + return async ctx => { + return await ctx.render(name, data) + } + } + + static createRoutes() { + const controller = new HtmxController() + const router = new Router({ auth: "try" }) + router.post("/clicked", async ctx => { + return await ctx.render("htmx/fuck", { title: "HTMX Clicked" }) + }) + return router + } } + +export default HtmxController diff --git a/src/controllers/Page/PageController.js b/src/controllers/Page/PageController.js index b20d1ee..d7fbf0f 100644 --- a/src/controllers/Page/PageController.js +++ b/src/controllers/Page/PageController.js @@ -1,14 +1,22 @@ -export const Index = async ctx => { - return await ctx.render("page/index/index", { title: "沧源一场" }) -} +import Router from "utils/router.js" -export const Page = (name, data) => async ctx => { - return await ctx.render(name, data) -} +class PageController { + async index(ctx) { + return await ctx.render("page/index/index", { title: "沧源一场" }) + } -import Router from "utils/router.js" -export function createRoutes() { - const router = new Router({ auth: "try" }) - router.get("/", Index) - return router + page(name, data) { + return async ctx => { + return await ctx.render(name, data) + } + } + + static createRoutes() { + const controller = new PageController() + const router = new Router({ auth: "try" }) + router.get("/", controller.index.bind(controller)) + return router + } } + +export default PageController diff --git a/src/controllers/StatusController.js b/src/controllers/StatusController.js index 5239ec0..d9cef1c 100644 --- a/src/controllers/StatusController.js +++ b/src/controllers/StatusController.js @@ -1,16 +1,20 @@ -import { formatResponse } from "utils/helper.js" +import Router from "utils/router.js" -export const status = async (ctx) => { - ctx.body = "OK" -} +class StatusController { + async status(ctx) { + ctx.body = "OK" + } -import Router from "utils/router.js" -export function createRoutes() { - const v1 = new Router({ prefix: "/api/v1" }) - v1.use((ctx, next) => { - ctx.set("X-API-Version", "v1") - return next() - }) - v1.get("/status", status) - return v1 + static createRoutes() { + const controller = new StatusController() + const v1 = new Router({ prefix: "/api/v1" }) + v1.use((ctx, next) => { + ctx.set("X-API-Version", "v1") + return next() + }) + v1.get("/status", controller.status.bind(controller)) + return v1 + } } + +export default StatusController