2016-04-24 72 views
0

導出我的路線時出現一個奇怪的問題。出於某種原因,此代碼的工作對我來說:在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 

路線/ 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 

路線/ index.js

import Router from 'koa-router' 
const router = new Router() 

router.get('/', async ctx => { 
    await ctx.render('index') 
}) 

export default router.routes 

爲什麼當我做第二個方式不工作?

回答

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 
+0

啊,我明白了,我不得不這樣做'出口默認router.routes.bind(路由器) '。我不知道綁定操作符是一個簡寫,非常感謝分享!我希望它符合規範。 – saadq

0

你必須添加一個方法:

router.allowedMethods() 

這樣的:

app.use(router.routes(), router.allowedMethods())