在 Koa 中导出路由
Exporting routes in Koa
我在导出路线时遇到了一个奇怪的问题。出于某种原因,这段代码对我有用:
app.js
import Koa from 'koa'
import routes from './routes/index'
const app = new Koa()
app.use(routes)
app.listen(3000, () => {
console.log('Server listening at http://localhost:3000')
})
export default app
routes/index.js
import Router from 'koa-router'
const router = new Router()
router.get('/', async ctx => {
await ctx.render('index')
})
export default router.routes()
但是当我只是导出路由函数然后尝试在 app.js
中调用它时,我得到一个错误:
app.js
import Koa from 'koa'
import routes from './routes/index'
const app = new Koa()
app.use(routes())
app.listen(3000, () => {
console.log('Server listening at http://localhost:3000')
})
export default app
routes/index.js
import Router from 'koa-router'
const router = new Router()
router.get('/', async ctx => {
await ctx.render('index')
})
export default router.routes
为什么第二种方法不行?
您可能想要导出一个 bound function,因此其中的 this
将引用路由器对象。
bind operator 可以很好地完成。我相信它已经可用,因为您正在使用 async/await
.
import Router from 'koa-router'
const router = new Router()
router.get('/', async ctx => {
await ctx.render('index')
})
export default ::router.routes
您必须添加一个方法:
router.allowedMethods()
像这样:
app.use(router.routes(), router.allowedMethods())
我在导出路线时遇到了一个奇怪的问题。出于某种原因,这段代码对我有用:
app.js
import Koa from 'koa'
import routes from './routes/index'
const app = new Koa()
app.use(routes)
app.listen(3000, () => {
console.log('Server listening at http://localhost:3000')
})
export default app
routes/index.js
import Router from 'koa-router'
const router = new Router()
router.get('/', async ctx => {
await ctx.render('index')
})
export default router.routes()
但是当我只是导出路由函数然后尝试在 app.js
中调用它时,我得到一个错误:
app.js
import Koa from 'koa'
import routes from './routes/index'
const app = new Koa()
app.use(routes())
app.listen(3000, () => {
console.log('Server listening at http://localhost:3000')
})
export default app
routes/index.js
import Router from 'koa-router'
const router = new Router()
router.get('/', async ctx => {
await ctx.render('index')
})
export default router.routes
为什么第二种方法不行?
您可能想要导出一个 bound function,因此其中的 this
将引用路由器对象。
bind operator 可以很好地完成。我相信它已经可用,因为您正在使用 async/await
.
import Router from 'koa-router'
const router = new Router()
router.get('/', async ctx => {
await ctx.render('index')
})
export default ::router.routes
您必须添加一个方法:
router.allowedMethods()
像这样:
app.use(router.routes(), router.allowedMethods())