Browse Source

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

route
谢亚昕 1 month 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 { 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

66
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

34
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

30
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

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) => {
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

Loading…
Cancel
Save