2016-04-24 8 views
0

Ich habe ein seltsames Problem beim Exportieren meiner Routen. Aus irgendeinem Grund funktioniert dieser Code für mich:Exportieren von Routen 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 

Routen/index.js

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

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

export default router.routes() 

aber wenn ich exportieren nur die Routen Funktion und dann versuchen, es in app.js aufrufen, erhalte ich einen Fehler:

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 

Routen/index.js

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

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

export default router.routes 

Warum es nicht funktioniert, wenn ich es die zweite Art und Weise zu tun?

Antwort

1

Sie möchten wahrscheinlich eine bound function exportieren, also this darin würde es sich auf ein Router-Objekt beziehen.

Es könnte schön mit einem bind operator getan werden. Ich glaube, es ist bereits verfügbar, seit Sie async/await verwenden.

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

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

export default ::router.routes 
+0

Ah, ich sehe, hatte ich 'Exportstandard router.routes.bind (Router) zu tun '. Und ich wusste nichts über den Bindeoperator als Abkürzung dafür, vielen Dank für das Teilen! Ich hoffe, es macht es zur Spezifikation. – saadq

0

Sie haben eine Methode hinzufügen:

router.allowedMethods() 

wie folgt aus:

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