@Banjamin
Пишу

Почему теряется контекст экземпляра класса?

Добрый день. Этот вопрос вытекает из другого вопроса. Вот код класса:
class Authorized {
    constructor() {
        this.jwt = require('jsonwebtoken')
        this.secretKey = 'dSjkLsSjerIfkL'
        
    }
    createSign(data, secretKey){
        console.log('create data', this)
        return this.jwt.sign(data,secretKey)
    }
    isAuthorized(req, res, next){
        console.log('isAuth',this)
        next()
}


Я его упростил и добавил console.log(). Первый метод createSign используется как функция и this для него корректен. Второй метод используется как middleware, и this для него undefined. Подскажите почему так происходит.
  • Вопрос задан
  • 74 просмотра
Решения вопроса 1
lastuniverse
@lastuniverse
Всегда вокруг да около IT тем
Потому что он используется как мидлваре.
Вызывайте его привязывая контент, както так

const Authorized = require('../moduls/authorized')
const auth = new Authorized();


// так
router.get("path/",auth.isAuthorized.bind(auth));
// или так
router.get("path/",(...a)=>auth.isAuthorized(...a));

и еще кучей способов

вот, можете почитать про Привязка контекста к функции

а еще лучше измените метод isAuthorized примерно так:
isAuthorized(){
   return (req, res, next)=>{
      console.log('isAuth',this)
      // тут код мидлвара
  }
}


и используйте его так
router.get("path/",auth.isAuthorized());
// или
router.post("path/",auth.isAuthorized());
// или
router.use(auth.isAuthorized());
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы