Невозможно получить доступ к этому объекту в классе

У меня возникла проблема при создании контроллера, в котором есть класс userController, который имеет методы login и createuser, и я пытаюсь получить доступ к методу, который я описал, из этого объекта, но я не могу получить доступ к методу this.userExists (). Когда я пытаюсь получить доступ, он показывает, что userExists не определен.

import User from '../models/User';
class userController {
    userExists(username) {
        User.findOne({ username }, (err, user) => {
            if (!!user) {
                return true;
            } else {
                return false;
            }
        });
    }
    login(req, res) {
        const data = req.body;
        const { username } = data;
        console.info(this);

        if (!this.userExists(username)) { //returns undefined
            res.status(404).json({ success: false, error: 'User not found' });
            return;
        }
        User.findOne(data, ('name', 'username'), (err, user) => {
            console.info(user);
            if (err) {
                res.status(400).json({ success: false, error: 'Error in sever' });
            } else {
                if (user) {
                    res.status(200).json({ success: true, user, token: user.generateToken() });
                } else {
                    res.status(404).json({ success: false, error: 'user not found' });
                }
            }
        });
    }

    create(req, res) {
        const data = req.body;
        if (this.userExists) {
            res.status(403).json({ success: false, error: 'User already exists' });
            return;
        }
        console.info(data);
        const user = new User(data);
        user.save((err, data) => {
            if (err) {
                console.info(err);
                res.status(400).json({ success: false, error: 'Error in server' });
            } else {
                res.status(200).json({ success: true, user });
            }
        });
    }
}

export default new userController();
userExists ничего не возвращает. Обратный вызов в функции findOne возвращает что-то, но это не все.
Andy 27.10.2018 17:50

Собственно, возврат из внутренней функции не возвращается во внешнюю. Было бы лучше использовать обещание findOne() вместо того, чтобы предполагать, что вы используете версию мангуста, которая поддерживает обещания

charlietfl 27.10.2018 17:51

Если вы добавите код для findOne, возможно, мы придумаем решение.

Andy 27.10.2018 17:52

@ Энди, это метод мангуста

charlietfl 27.10.2018 17:53

Дело в том, что я не могу получить доступ к методу userExists из метода входа в систему с помощью метода this.login. Не знаю почему: /

Asim Dahal 27.10.2018 17:55

Вы сбиваете с толку доступ к методу тем, что метод ничего не возвращает. Также findOne() - это асинхронный

charlietfl 27.10.2018 17:56

Кроме того, userExists нуждается в переданном name. Вы этого не делаете.

Andy 27.10.2018 17:58

@andy передал имя, не сработало. На самом деле, когда я пытаюсь сделать console.info(this), он возвращает undefined.

Asim Dahal 27.10.2018 18:01

@charlietfl Хорошо, даже если findOne является асинхронным, разве функция userExists () не должна быть доступна для this.userExists()? Дело в том, что когда я пытаюсь это сделать. UserExists () показывает, что userExists не определен

Asim Dahal 27.10.2018 18:03

Нет, это показывает, что результат вызова this.userExists() не определен, а не то, что this.userExists не определен. Большая разница. Последний вызовет ошибку. Опять же, вы путаете доступ к методу с тем, что метод возвращает

charlietfl 27.10.2018 18:28
Поведение ключевого слова "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) для оценки ваших знаний,...
0
11
28
0

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