我使用Auth0 quick start在 Express 中實作了受保護的 API 路由。受保護的路由由 Auth0 提供的checkJwt名為的中間件函式處理。每當呼叫 GET 方法之一時,它就會運行。如果我在.server.js
如何分離路由處理并仍然保留受保護的 API 路由?
server.js 帶有受保護路由的作業代碼。
import colors from 'colors'
import cors from 'cors'
import express from 'express'
import morgan from 'morgan'
import dotenv from 'dotenv'
import connectDB from './db.js'
import checkJwt from './middleware/auth.middleware.js'
import { getStudents, getStudent } from './controllers/students.controller.js'
dotenv.config()
connectDB()
export const app = express()
app.use(cors())
app.use(express.json({ limit: '50mb' }))
if (process.env.NODE_ENV === 'development') {
app.use(morgan('dev'))
}
//handle routing internally
app.get('/api/students/:id', checkJwt, getStudent)
app.get('/api/students', checkJwt, getStudents)
const PORT = process.env.PORT || 6000
app.listen(PORT, () =>
console.log(
`Server running in ${process.env.NODE_ENV} mode on port ${PORT}`.yellow.bold
)
)
隨著代碼的增長,我想脫離路由處理。checkJwt分開路由后,我不知道該放在哪里。
server.js 所需的代碼結構是:
import colors from 'colors'
import cors from 'cors'
import express from 'express'
import morgan from 'morgan'
import dotenv from 'dotenv'
import connectDB from './db.js'
import studentsRouter from './routes/students.routes.js'
dotenv.config()
connectDB()
const app = express()
app.use(cors())
app.use(express.json({ limit: '50mb' }))
if (process.env.NODE_ENV === 'development') {
app.use(morgan('dev'))
}
// handle routing externally
const apiRouter = express.Router()
app.use('/api', apiRouter)
apiRouter.use('/students', studentsRouter)
const PORT = process.env.PORT || 6000
app.listen(PORT, () =>
console.log(
`Server running in ${process.env.NODE_ENV} mode on port ${PORT}`.yellow.bold
)
)
路由在students.routes.jsRoute 處理程式中實作。
import express from 'express'
import { getStudent, getStudents } from '../controllers/students.controller.js'
const router = express.Router()
// where can I implement checkJwt?
router.route('/').get(getStudents)
router.route('/:id').get(getStudent)
export default router
是否可以通過移動路由來簡化代碼,并且仍然保護我的路由?
uj5u.com熱心網友回復:
您可以在路由器中使用任何這樣的中間件:
const router = express.Router();
router.route('/').get([checkJwt, secondMiddleware, ...] , getStudents);
基于檔案: 快速路由
您可以提供多個回呼函式,它們的行為類似于中間件來處理請求。唯一的例外是這些回呼可能會呼叫 next('route') 來繞過剩余的路由回呼。您可以使用此機制對路由施加先決條件,然后如果沒有理由繼續當前路由,則將控制權傳遞給后續路由。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/417370.html
標籤:
