【问题标题】:Exporting routes in Koa在 Koa 中导出路线
【发布时间】:2016-04-24 04:28:10
【问题描述】:

我在导出路线时遇到了一个奇怪的问题。出于某种原因,这段代码对我有用:

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

为什么我用第二种方法不行?

【问题讨论】:

    标签: javascript node.js koa koa-router koa2


    【解决方案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
    

    【讨论】:

    • 啊,我明白了,我必须这样做export default router.routes.bind(router)。而且我不知道绑定运算符作为它的简写,非常感谢分享!我希望它能成为规范。
    【解决方案2】:

    你必须添加一个方法:

    router.allowedMethods()
    

    像这样:

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

    【讨论】:

      猜你喜欢
      • 2015-10-23
      • 1970-01-01
      • 2021-06-29
      • 2019-07-19
      • 2017-07-24
      • 2016-05-02
      • 2017-06-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多