Ошибка при составлении промежуточного программного обеспечения асинхронной функции 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),
1 ответ
Решение
Вы используете генератор на основе koa-compose
для Коа 2 это не сработает. Тебе нужно koa-compose@3.x
установить его с помощью:
npm install -S koa-compose@next