Browse Source

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

route
谢亚昕 2 months ago
parent
commit
ed60efbaf8
  1. 47
      src/controllers/AuthController.js
  2. 54
      src/controllers/JobController.js
  3. 16
      src/controllers/Page/HtmxController.js
  4. 18
      src/controllers/Page/PageController.js
  5. 14
      src/controllers/StatusController.js

47
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() { */
static createRoutes() {
const controller = new AuthController()
const router = new Router({ prefix: "/api" }) const router = new Router({ prefix: "/api" })
router.get("/hello", hello, { auth: false }) router.get("/hello", controller.hello.bind(controller), { auth: false })
router.get("/user/:id", getUser) router.get("/user/:id", controller.getUser.bind(controller))
router.post("/register", register) router.post("/register", controller.register.bind(controller))
router.post("/login", login) router.post("/login", controller.login.bind(controller))
return router return router
} }
}
export default AuthController

54
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("/", list) router.get("/", controller.list.bind(controller))
router.post("/start/:id", start) router.post("/start/:id", controller.start.bind(controller))
router.post("/stop/:id", stop) router.post("/stop/:id", controller.stop.bind(controller))
router.post("/update/:id", updateCron) router.post("/update/:id", controller.updateCron.bind(controller))
return router return router
} }
}
export default JobController

16
src/controllers/Page/HtmxController.js

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

18
src/controllers/Page/PageController.js

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

14
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 {
async status(ctx) {
ctx.body = "OK" 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