Проблема с контекстом JS узла

У меня есть код в моем контроллере, например, следующий

const express = require('express');
const AuthService = require('../../services/auth');

let router = express.Router();

router.get('/login', AuthService.login);

Теперь, когда я вызываю метод входа в систему в своих службах и вызываю другой метод изнутри метода входа, например.

class Authentication {

  login (req, res) {
    this.notify();
    res.send({message: 'login method'});
  }

  notify () {
    console.info('this is just a notification method.');
  }
}

module.exports = new Authentication();

Я получаю следующую ошибку.

TypeError: Cannot read property 'notify' of undefined

Я знаю, что это проблема контекста, но я не знаю, как ее исправить.

Разве это не res.end(); вместо res.send();?

Sv443 27.11.2018 13:31

Отправить тоже здесь работает. Но проблема не в этом.

pawanpandey392 27.11.2018 13:31

var self = this; self.notify (); попробуй это.

Sameer 27.11.2018 13:33

(TL; DR дубликата: заменить AuthService.login на AuthService.login.bind(AuthService))

Joe Clay 27.11.2018 13:34

@SameerAhmad Тоже не работает.

pawanpandey392 27.11.2018 13:35

@JoeClay Я знаю, что привязка может решить эту проблему, но я хочу знать, нужно ли мне делать это для каждого маршрута?

pawanpandey392 27.11.2018 13:37

просто используйте стрелочные функции или привязку. И да, вы должны сделать это для каждого промежуточного программного обеспечения, которое требует правильного контекста.

Marcos Casagrande 27.11.2018 13:58
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
7
31
0

Другие вопросы по теме