Вы использовали бы промежуточное программное обеспечение.
const app = require('koa')();
const router = require('koa-router')();
function * ensureLoggedIn (next) {
if (!this.currentUser) {
this.redirect('/login')
return
}
// If we get this far, then we know the user is logged in and
// we can yield to the downstream routes.
yield * next
}
router.get('/users', function *() {...})
router.get('/users/:id/edit', ensureLoggedIn, function *() {...})
router.post('/user/:id', ensureLoggedIn, function *() {...})
app.use(router.routes()).listen(3000)
Это самый общий способ. В зависимости от используемой библиотеки маршрутизации могут быть другие варианты.
Например, koa-router позволяет реализовать промежуточное программное обеспечение, специфичное для маршрутизатора, которое выполняется только в том случае, если запрос соответствует маршрутизатору.
const unrestricted = require('koa-router')();
unrestricted.get('/users', function *() {...})
const loggedIn = require('koa-router')();
loggedIn.use(ensureLoggedIn)
loggedIn.get('/users/:id/edit', function *() {...})
loggedIn.post('/user/:id', function *() {...})
app.use(unrestricted.routes()).use(loggedIn.routes()).listen(3000)
Или вы можете использовать router.param(name, middleware)
указать промежуточное программное обеспечение, которое будет работать только на маршруты с этим параметром URL:
const router = require('koa-router')();
// Only run the given middleware if the URL has the "id" parameter
router.param('id', ensureLoggedIn, loadUser)
router.get('/users', function *() {...})
router.get('/users/:id/edit', function *() {...}) // <--
router.post('/user/:id', function *() {...}) // <--
app.use(router.routes()).listen(3000)