Ошибка при составлении промежуточного программного обеспечения асинхронной функции koa

Я использую koa-compose для сборки промежуточного ПО, как это предлагается в руководстве< /а>. Я импортирую koa-compose как kompose.

У меня есть следующий код:

const home = async function home (ctx,next) {
  if(ctx.path === '/') {
    ctx.body = 'Hello World!'
  } else {
    await next()
  }
}

const random = async function random (ctx,next) {
  console.log(ctx)
  if(ctx.path === '/random') {
    console.log('Inside random function')
    ctx.body = Math.floor(Math.random() * 10)
  } else {
    await next()
  }
}

const backwards = async function backwards (ctx,next) {
  if(ctx.path === '/backwards') {
    ctx.body = 'sdrawkcab'
  } else {
    await next()
  }
}

const pi = async function pi (ctx,next) {
  if(ctx.path === '/pi') {
    ctx.body = String(Math.PI)
  } else {
    await next()
  }
}

const body2 = kompose([random,backwards,pi,home])

Я использую его как последнее промежуточное ПО в цепочке:

app.use(responseTime())
app.use(logger())
app.use(body2)
app.listen(3000)

Я получаю эту ошибку:

TypeError: undefined is not a function
      at Object.<anonymous> (/home/vamsi/Do/koa-tutorial/node_modules/koa-compose/index.js:28:19)
      at undefined.next (native)
      at onFulfilled (/home/vamsi/Do/koa-tutorial/node_modules/co/index.js:65:19)
      at /home/vamsi/Do/koa-tutorial/node_modules/co/index.js:54:5
      at new Promise (/home/vamsi/.nvm/v6.2.0/lib/node_modules/babel-cli/node_modules/core-js/modules/es6.promise.js:191:7)
      at Object.co (/home/vamsi/Do/koa-tutorial/node_modules/co/index.js:50:10)
      at converted (/home/vamsi/Do/koa-tutorial/node_modules/koa-convert/index.js:17:15)
      at dispatch (/home/vamsi/Do/koa-tutorial/node_modules/koa/node_modules/koa-compose/index.js:43:32)
      at next (/home/vamsi/Do/koa-tutorial/node_modules/koa/node_modules/koa-compose/index.js:44:18)
      at _callee7$ (index.js:72:11)

Полный код находится на github. Вы можете заменить body() на body2 в коде там.

ОБНОВИТЬ:

После небольшого дополнительного ведения журнала он говорит:

 TypeError: next is not a function
       at Object._callee3$ (index.js:29:11)
       at tryCatch (/home/vamsi/.nvm/v6.2.0/lib/node_modules/babel-cli/node_modules/regenerator-runtime/runtime.js:62:40)
       at GeneratorFunctionPrototype.invoke [as _invoke] (/home/vamsi/.nvm/v6.2.0/lib/node_modules/babel-cli/node_modules/regenerator-runtime/runtime.js:336:22)
       at GeneratorFunctionPrototype.prototype.(anonymous function) [as next] (/home/vamsi/.nvm/v6.2.0/lib/node_modules/babel-cli/node_modules/regenerator-runtime/runtime.js:95:21)
       at step (index.js:3:1)
       at index.js:3:1
       at new Promise (/home/vamsi/.nvm/v6.2.0/lib/node_modules/babel-cli/node_modules/core-js/modules/es6.promise.js:191:7)
       at Object.<anonymous> (index.js:3:1)
       at Object.backwards (index.js:25:7)
       at Object.<anonymous> (/home/vamsi/Do/koa-tutorial/node_modules/koa-compose/index.js:25:28),

person vamsiampolu    schedule 10.09.2016    source источник


Ответы (1)


Вы используете koa-compose на основе генератора для Koa 2, это не сработает. Вам нужно [email protected] установить его с помощью:

npm install -S koa-compose@next
person Jeff    schedule 10.09.2016