2016-04-24 3 views
0

У меня странная проблема при экспорте моих маршрутов. По некоторым причинам, этот код работает для меня:Экспорт маршрутов в Коа

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()) 

 Смежные вопросы

  • Нет связанных вопросов^_^