3-3中间件编写demo时无法解决的错误

来源:3-3 Koa中间件

慕粉3624324

2019-05-24

老师:在我在按您的demo编码后,点击浏览器发生报错,把代码把您的粘过来也同样解决不了,请帮忙看看!以下是错误信息及代码

npm run dev

> koa2-learn@0.1.0 dev /Library/WebServer/Documents/project/vue/koa2-learn
> nodemon bin/www

[nodemon] 1.19.0
[nodemon] to restart at any time, enter `rs`
[nodemon] watching: *.*
[nodemon] starting `node bin/www`
server error TypeError: Cannot read property 'count' of undefined
    at pv (/Library/WebServer/Documents/project/vue/koa2-learn/middleware/pv.js:2:9)
    at /Library/WebServer/Documents/project/vue/koa2-learn/middleware/pv.js:8:9
    at dispatch (/Library/WebServer/Documents/project/vue/koa2-learn/node_modules/koa-compose/index.js:42:32)
    at parseBody.then.body (/Library/WebServer/Documents/project/vue/koa2-learn/node_modules/koa-bodyparser/index.js:74:14)
    at processTicksAndRejections (internal/process/task_queues.js:86:5) { request:
   { method: 'GET',
     url: '/',
     header:
      { host: 'localhost:3000',
        connection: 'keep-alive',
        'cache-control': 'max-age=0',
        'upgrade-insecure-requests': '1',
        'user-agent':
         'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36',
        accept:
         'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3',
        'accept-encoding': 'gzip, deflate, br',
        'accept-language': 'zh-CN,zh;q=0.9',
        cookie: 'Webstorm-ecd841cd=0955b405-6973-455e-8243-991c86bd6ac1' } },
  response:
   { status: 404,
     message: 'Not Found',
     header: [Object: null prototype] {} },
  app: { subdomainOffset: 2, proxy: false, env: 'development' },
  originalUrl: '/',
  req: '<original node req>',
  res: '<original node res>',
  socket: '<original node socket>' }


以下为浏览器错误信息:

Error
Looks like something broke!

        
TypeError: Cannot read property 'count' of undefined
    at pvaaa (/Library/WebServer/Documents/project/vue/koa2-learn/middleware/pvaaa.js:2:9)
    at /Library/WebServer/Documents/project/vue/koa2-learn/middleware/pvaaa.js:8:9
    at dispatch (/Library/WebServer/Documents/project/vue/koa2-learn/node_modules/koa-compose/index.js:42:32)
    at parseBody.then.body (/Library/WebServer/Documents/project/vue/koa2-learn/node_modules/koa-bodyparser/index.js:74:14)
    at processTicksAndRejections (internal/process/task_queues.js:86:5)
        

app.js:

const Koa = require('koa')
const app = new Koa()
const views = require('koa-views')
const json = require('koa-json')
const onerror = require('koa-onerror')
const bodyparser = require('koa-bodyparser')
const logger = require('koa-logger')
const pvaaa = require('./middleware/pvaaa')

const index = require('./routes/index')
const users = require('./routes/users')

// error handler
onerror(app)

// middlewares
app.use(bodyparser({
  enableTypes:['json', 'form', 'text']
}))
app.use(pvaaa())
app.use(json())
app.use(logger())
app.use(require('koa-static')(__dirname + '/public'))

app.use(views(__dirname + '/views', {
  extension: 'ejs'
}))

// logger
app.use(async (ctx, next) => {
  const start = new Date()
  await next()
  const ms = new Date() - start
  console.log(`${ctx.method} ${ctx.url} - ${ms}ms`)
})

// routes
app.use(index.routes(), index.allowedMethods())
app.use(users.routes(), users.allowedMethods())

// error-handling
app.on('error', (err, ctx) => {
  console.error('server error', err, ctx)
});

module.exports = app

./middleware/pvaaa.js:

function pvaaa(ctx){
    ctx.session.count++
    global.console.log('pvaaa',ctx.path)
}

module.exports=function(){
    return async function(ctx,next){
        pvaaa(ctx)
        await next()
    }
}

写回答

1回答

快乐动起来呀

2019-05-24

同学你要学会调试,你的报错是说 count of undefined,那你要排查什么地方在调用这个count,显然是 ctx.session.count,也就是说ctx.session是undefined,那session的插件你都正确安装了吗,这不就一步一步找到地方了吗,自己尝试一下

0
1
慕粉3624324
谢谢老师了
2019-05-29
共1条回复

Vue全家桶+SSR+Koa2全栈开发美团网

整合大前端8项技术,全面晋级全栈工程师,毕设/面试作品

2445 学习 · 1638 问题

查看课程