2016-10-18 2 views
0

Как мы получаем доступ к маршруту koa js context (this) и es6 class this в классе es6?Работа с маршрутами koa js и классом es6

При попытке доступа класса свойство с помощью this.name я получить неопределенные

test.js

export default class { 
    constructor (opts) { 
    this.name = 'test' 
    } 

    welcome() { 
    console.log(this.name) // 'this' is UNDEFINED. Trying to access class property. But getting undefined 
    this.body = 'welcome '+this.params.name // 'this' works fine here as a koa reference 
    } 
} 

app.js

import test from './test' 
let Test = new test({}) 

router.get('/test/:name', Test.welcome) 
+0

Контекст теряется при передаче обратного вызова в качестве параметра, например 'Test.welcome'. Просто используйте '() => Test.welcome()' вместо этого. – Andrey

+1

Ваша капитализация нечетная. Классы должны быть в верхнем регистре, в нижнем регистре. – Bergi

+0

Используйте 'router.get ('/ test /: name', function() {Test.welcome (this)})' и добавьте параметр 'context' к вашему методу – Bergi

ответ

-1

Я не уверен в классе синтаксис объявления и экспорта, который вы используете, и я думаю, что это может быть проблемой.

Что-то, как это должно работать (обратите внимание, что этот код работает с требуют, но это должно быть так же с import):

test.js

class test{ 
    constructor(opts) { 
     this.name = 'test'; 
    } 

    welcome() { 
     console.log(this.name); // 'this' is UNDEFINED. Trying to access class property. But getting undefined 
     this.body = 'welcome ' + this.params.name; // 'this' works fine here as a koa reference 
    } 
} 

module.exports = test; 

app.js

let test = require('./test'); 
let Test = new test({}); 

Test.welcome(); 

Хотя этот код показывает this.name отлично, он ломается на this.params, который, как я полагаю, вы заявили в другом месте.

Смежные вопросы