@bpGusar
*spoiler*

Как вернуть ответ из функции-контроллера в post express'а?

Есть функция-контроллер, она находится в 1 файле
export function loginProtect(data) {
    // ищем в базе совпадения по имейлу
    UserModel.findOne({ user_email: data.user_email }, function (err, user) {
        if (err) return err;
        // далее если совпадение нашлось сверяешь хэш пароль с тем что был прислан в функцию
        bcrypt.compare(data.user_password, user.user_password, function (err, res) {
            if (err) return err;
            // res это результат работы, возвращает true или false
            return res;
        });
    });
}


Есть post запрос который инит эту функцию, он находится во 2 файле
app.post('/api/login', (req, res) => {
    const user = {
        user_data: req.query
    }
    // отправляем данные в контроллер
    UserController.loginProtect(req.query);
    // вот всё что ниже должно исполняться на основе ответа из функции выше
    jwt.sign({ user: user.user_data }, process.env.SECRET_FOR_JWT, (err, token) => {
        res.json({
            success: true,
            token
        })
    })
});


Как собсно из функции loginProtect вернуть ответ в post запрос?
  • Вопрос задан
  • 265 просмотров
Решения вопроса 1
rockon404
@rockon404
Frontend Developer
export function loginProtect(data) {
  return new Promise((resolve, reject) => {
    // ищем в базе совпадения по имейлу
    UserModel.findOne({ user_email: data.user_email }, function (err, user) {
      if (err) return reject(err);
      // далее если совпадение нашлось сверяешь хэш пароль с тем что был прислан в функцию
      bcrypt.compare(data.user_password, user.user_password, function (err, res) {
        if (err) return reject(err);
        // res это результат работы, возвращает true или false
        return resolve(res);
      });
    });
  });
}


app.post('/api/login', (req, res) => {
    const user = {
        user_data: req.query
    }
    // отправляем данные в контроллер
    UserController.loginProtect(req.query).then(result => {
       // handle success
      jwt.sign({ user: user.user_data }, process.env.SECRET_FOR_JWT, (err, token) => {
        res.json({
            success: true,
            token
        });
      });
    
    }).catch(err => {
      // handle error
    });   
});
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы