Как получить данные и сделать условия от 2 моделей в контроллере реагировать JS? - PullRequest
0 голосов
/ 19 декабря 2018

Я создаю форму входа с приложением реагировать, а также я создаю API.Для бэкэнда я хочу создать функцию, в которую может войти только администратор ролей, так как теперь каждый пользователь может войти в бэкэнд.У меня есть функция для входа, это моя функция API:

const login = async (req, res, next) => {
    const { body } = req;
    const { username, password } = body;

    ...

    } else {
        UserModel.find({
            username: username
        }, (err, users) => {
            if (err) {
                res.send({
                    success: false,
                    message: 'Error: Server error.'
                })
            } else if (users.length != 1) {
                res.send({
                    success: false,
                    message: 'Error: User not exist!'
                })
            } else {
                const user = users[0]
                const roleId = user.role

                const role = await checkUserRole(roleId)
                console.log(role)

                if (!user.validPassword(password)) {
                    res.send({
                        success: false,
                        message: 'Error: Password not match.'
                    })
                } else {
                    res.send({
                        success: true,
                        message: 'Login success'
                    })
                }
            }
        })
    }
}

, и я хочу проверить, если роль пользователя является администратором, поэтому я создаю функцию до

const checkUserRole = async (roleId) => {
    return RoleModel.findById(roleId).exec((err, role) => {
        if (err) {
            return message = 'Server error.'
        } else if (role.roleName != 'admin') {
            return message = 'You are not admin. Please use admin credential!'
        }
    })
}

, но результат, когдая console.log(role) это undefined.

Как получить результат от checkUserRole?Или я что-то пропустил?

1 Ответ

0 голосов
/ 19 декабря 2018

Код ниже должен работать:

const checkUserRole = async (roleId) => {
    return await RoleModel.findById(roleId,(err, role) => {
        if (err) {
            return message = 'Server error.'
        } else if (role.roleName != 'admin') {
            return message = 'You are not admin. Please use admin credential!'
        }
    })
}

Ваш исходный код не работает, потому что вы включаете обещание, возвращаемое exec, в обратный вызов.Приведенный выше код возвращает запрос.Вы также можете попробовать другой вариант, используя только exec() без обратного вызова, и обработать ошибки с помощью try catch.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...