Browse Source

feat: 重构控制器,统一方法调用方式,优化路由注册逻辑

route
谢亚昕 2 months ago
parent
commit
ed60efbaf8
  1. 59
      src/controllers/AuthController.js
  2. 66
      src/controllers/JobController.js
  3. 34
      src/controllers/Page/HtmxController.js
  4. 30
      src/controllers/Page/PageController.js
  5. 30
      src/controllers/StatusController.js

59
src/controllers/AuthController.js

@ -1,44 +1,45 @@
import UserService from "services/UserService.js" import UserService from "services/UserService.js"
import { formatResponse } from "utils/helper.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) => { async hello(ctx) {
ctx.body = formatResponse(true, "Hello World") ctx.body = formatResponse(true, "Hello World")
} }
export const getUser = async (ctx) => { async getUser(ctx) {
const user = await userService.getUserById(ctx.params.id) const user = await this.userService.getUserById(ctx.params.id)
ctx.body = formatResponse(true, user) ctx.body = formatResponse(true, user)
} }
export const register = async (ctx) => { async register(ctx) {
try {
const { username, email, password } = ctx.request.body 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) ctx.body = formatResponse(true, user)
} catch (err) {
ctx.body = formatResponse(false, null, err.message)
} }
}
export const login = async (ctx) => { async login(ctx) {
try {
const { username, email, password } = ctx.request.body 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) 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" }) static createRoutes() {
router.get("/hello", hello, { auth: false }) const controller = new AuthController()
router.get("/user/:id", getUser) const router = new Router({ prefix: "/api" })
router.post("/register", register) router.get("/hello", controller.hello.bind(controller), { auth: false })
router.post("/login", login) router.get("/user/:id", controller.getUser.bind(controller))
return router router.post("/register", controller.register.bind(controller))
router.post("/login", controller.login.bind(controller))
return router
}
} }
export default AuthController

66
src/controllers/JobController.js

@ -1,56 +1,46 @@
// Job Controller 示例:如何调用 service 层动态控制和查询定时任务 // Job Controller 示例:如何调用 service 层动态控制和查询定时任务
import JobService from "services/JobService.js" import JobService from "services/JobService.js"
import { formatResponse } from "utils/helper.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) => { async list(ctx) {
try { const data = this.jobService.listJobs()
const data = jobService.listJobs()
ctx.body = formatResponse(true, data) ctx.body = formatResponse(true, data)
} catch (err) {
ctx.body = formatResponse(false, null, err.message || "获取任务列表失败")
} }
}
export const start = async (ctx) => { async start(ctx) {
const { id } = ctx.params const { id } = ctx.params
try { this.jobService.startJob(id)
jobService.startJob(id)
ctx.body = formatResponse(true, null, null, `${id} 任务已启动`) ctx.body = formatResponse(true, null, null, `${id} 任务已启动`)
} catch (err) {
ctx.body = formatResponse(false, null, err.message || "启动任务失败")
} }
}
export const stop = async (ctx) => { async stop(ctx) {
const { id } = ctx.params const { id } = ctx.params
try { this.jobService.stopJob(id)
jobService.stopJob(id)
ctx.body = formatResponse(true, null, null, `${id} 任务已停止`) ctx.body = formatResponse(true, null, null, `${id} 任务已停止`)
} catch (err) {
ctx.body = formatResponse(false, null, err.message || "停止任务失败")
} }
}
export const updateCron = async (ctx) => { async updateCron(ctx) {
const { id } = ctx.params const { id } = ctx.params
const { cronTime } = ctx.request.body const { cronTime } = ctx.request.body
try { this.jobService.updateJobCron(id, cronTime)
jobService.updateJobCron(id, cronTime)
ctx.body = formatResponse(true, null, null, `${id} 任务频率已修改`) ctx.body = formatResponse(true, null, null, `${id} 任务频率已修改`)
} catch (err) {
ctx.body = formatResponse(false, null, err.message || "修改任务频率失败")
} }
}
// 路由注册示例 static createRoutes() {
import Router from "utils/router.js" const controller = new JobController()
export function createRoutes() { const router = new Router({ prefix: "/api/jobs" })
const router = new Router({ prefix: "/api/jobs" }) router.get("/", controller.list.bind(controller))
router.get("/", list) router.post("/start/:id", controller.start.bind(controller))
router.post("/start/:id", start) router.post("/stop/:id", controller.stop.bind(controller))
router.post("/stop/:id", stop) router.post("/update/:id", controller.updateCron.bind(controller))
router.post("/update/:id", updateCron) return router
return router }
} }
export default JobController

34
src/controllers/Page/HtmxController.js

@ -1,16 +1,24 @@
export const Index = async ctx => { import Router from "utils/router.js"
return await ctx.render("index", { name: "bluescurry" })
}
export const Page = (name, data) => async ctx => { class HtmxController {
return await ctx.render(name, data) async index(ctx) {
} return await ctx.render("index", { name: "bluescurry" })
}
import Router from "utils/router.js" page(name, data) {
export function createRoutes() { return async ctx => {
const router = new Router({ auth: "try" }) return await ctx.render(name, data)
router.post("/clicked", async ctx => { }
return await ctx.render("htmx/fuck", { title: "HTMX Clicked" }) }
})
return router 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

30
src/controllers/Page/PageController.js

@ -1,14 +1,22 @@
export const Index = async ctx => { import Router from "utils/router.js"
return await ctx.render("page/index/index", { title: "沧源一场" })
}
export const Page = (name, data) => async ctx => { class PageController {
return await ctx.render(name, data) async index(ctx) {
} return await ctx.render("page/index/index", { title: "沧源一场" })
}
import Router from "utils/router.js" page(name, data) {
export function createRoutes() { return async ctx => {
const router = new Router({ auth: "try" }) return await ctx.render(name, data)
router.get("/", Index) }
return router }
static createRoutes() {
const controller = new PageController()
const router = new Router({ auth: "try" })
router.get("/", controller.index.bind(controller))
return router
}
} }
export default PageController

30
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) => { class StatusController {
ctx.body = "OK" async status(ctx) {
} ctx.body = "OK"
}
import Router from "utils/router.js" static createRoutes() {
export function createRoutes() { const controller = new StatusController()
const v1 = new Router({ prefix: "/api/v1" }) const v1 = new Router({ prefix: "/api/v1" })
v1.use((ctx, next) => { v1.use((ctx, next) => {
ctx.set("X-API-Version", "v1") ctx.set("X-API-Version", "v1")
return next() return next()
}) })
v1.get("/status", status) v1.get("/status", controller.status.bind(controller))
return v1 return v1
}
} }
export default StatusController

Loading…
Cancel
Save