我在导出路线时遇到了一个奇怪的问题。出于某种原因,此代码适用于我:
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
路由/ index.js
import Router from 'koa-router'
const router = new Router()
router.get('/', async ctx => {
await ctx.render('index')
})
export default router.routes()
但是当我只导出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
路由/ index.js
import Router from 'koa-router'
const router = new Router()
router.get('/', async ctx => {
await ctx.render('index')
})
export default router.routes
当我以第二种方式进行时,为什么它不起作用?
答案 0 :(得分:1)
您可能希望导出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
答案 1 :(得分:0)
You have to add a method:
router.allowedMethods()
like this:
app.use(router.routes(), router.allowedMethods())