1. ES Module
- 文件层级
- src
- routers
- index.ts
- login.router.ts
- routers
路由文件需要有 router 后缀,方便后续自动化。实现自动化思路:首先,读取当前文件下所有文件,如果不是以 router.ts 结尾,直接结束此次循环,否则读取路由文件信息进行配置,由于是默认导出,所以在进行路由配置的时候需要用到 default 参数。
// login.router.ts
import express from 'express'
import { verifyUser } from '../middleware/login.middleware'
const loginRouter = express.Router()
loginRouter.post('/login', verifyUser)
export default loginRouter
// index.ts
import fs from 'fs'
import express from 'express'
export const registerRouter = (app: ReturnType<typeof express>) => {
const files = fs.readdirSync(__dirname)
for (const file of files) {
if (!file.endsWith('.router.ts')) {
continue
}
const router = require(`./${file}`)
app.use(router.default)
}
}
2. CommonJs
// catalog.router.js
const express = require('express')
const router = express.Router()
router.get('/', book_controller.index)
router.get('/book/create', book_controller.book_create_get)
module.exports = router
// index.js
var fs = require('fs')
var express = require('express')
var router = express.Router()
/* If you can use the redirect router, you can dispose it in index.js file. */
router.get('/', function (req, res, next) {
res.redirect('/catalog')
})
function registerRouter(app) {
// configure redirect
app.use('/', router)
const files = fs.readdirSync(__dirname)
for (const file of files) {
if (!file.endsWith('.router.js')) {
continue
}
const router = require(`./${file}`)
const prefixRouterName = file.split('.')[0]
app.use(`/${prefixRouterName}`, router)
}
}
module.exports = registerRouter