关于 koa2 路由使用 class 编写 controller 出现 this 为 undefined 的情况
使用 koa2 路由
const myClass = require('../controllers/myClass); router.get('/api/a', myClass.getA);
使用 class 编写 controller
class MyClass { constructor() { this.a = 'xxx'; } getA(ctx) { ctx.body = this.a; } } module.exports = new MyClass();
我简单模拟了一下我的代码场景,然后就发现这样使用路由会出现错误 TypeError: Cannot read property 'a' of undefined
。想请教下大家为什么会这样,如果这种写法不可避免会出现这种问题,那么大家是怎么写的?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
你好,我也遇到了这个问题,想请问下你是怎么解决的呢?
我也遇到这问题了,楼主解决了吗?
好好看看 阮一峰的 es6 class吧
这是 js 基础问题,this 指向问题;
当路由进入后,你的 'getA' 是一个函数,此时 this 指向全局(非严格模式),undefined(严格模式);
四种解决方案 :
1,router.get('/api/a', myClass.getA.bind(myClass))
2,router.get('/api/a', ctx => myClass.getA(ctx))
3,
4,