构成koaasynchronous函数中间件的错误
我正在使用koa-compose
将指南中build议的中间件放在一起。 我inputkoa-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上 。 你可以在代码中用body2
replacebody()
。
更新:
在做了一些额外的日志logging之后,它说:
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),
你正在使用基于生成器的koa-compose
for Koa 2,这是行不通的。 你需要用koa-compose@3.x
安装它:
npm install -S koa-compose@next