Как изменить код, чтобы не использовать функцию asyn c - PullRequest
0 голосов
/ 30 января 2020

Я делаю код с последующим сопровождением узла, но в то же время я пишу свое собственное приложение на основе того, что я изучил в предыдущем курсе, а также код на одном из них. В приведенном ниже коде у нас есть часть промежуточного программного обеспечения, которое проверяет, является ли пользователь, вошедший в систему, пользователем, который владеет профилем, а затем позволяет им изменить его. Это было написано с использованием функции asyn c, и она работает так же, как и должна, но я хочу написать как функцию без asyn c, но я не получаю тот же конечный результат, может кто-нибудь помочь мне в записать эту функцию в не асинхронную c функцию?

//Function to see if the current password is valid
middlewareObj.isValid = async (req, res, next) => {
  const { user } = await User.authenticate()(req.user.username, req.body.currentPassword);
  if(user) {
    //Add user to res.locals
    res.locals.user = user;
    next();
  } else {
    req.flash("error", "The password you entered does not match the current password stored in the database, please try again");
    res.redirect("back");
  }
}

Я пробовал это, но это всегда дает правду независимо от того, что вы вводите в поле currentPassword в форме

//Function to see if the current email is valid
middlewareObj.isValid = (req, res, next) => {
  const user = User.authenticate()(req.user.username,
    req.body.currentPassword);
  if (user) {
    res.locals.user = user;
    next();
  } else {
    req.flash("error", "The password you entered does not match the current 
    password stored in the database, please try again");
    res.redirect("back");
  }
}

Ответы [ 2 ]

1 голос
/ 30 января 2020

Функция возвращает объект Promise (так что это правда). Если вы не используете async/await, вы можете использовать функцию then, чтобы выполнить обещание и поместить оставшийся код в обратный вызов:

//Function to see if the current password is valid
middlewareObj.isValid = function (req, res, next) => {
  (User.authenticate()(req.user.username, req.body.currentPassword)).then(({ user }) => {
    if (user) {
      //Add user to res.locals
      res.locals.user = user;
      next();
    } else {
      req.flash("error", "The password you entered does not match the current password stored in the database, please try again");
      res.redirect("back");
    }
  });
}

См. Документацию * 1008. * и then.

0 голосов
/ 31 января 2020

Это был ответ, который сработал в конце,

//Function to see if the current password is valid
middlewareObj.isValid = (req, res, next) => {
    const {user} = User.authenticate()(req.user.username, req.body.currentPassword).then(user => {
        if(!user.username && user.error) {
            req.flash("error", "The password you entered does not match the current password stored in the database, please try again");
            res.redirect("back");
        } else {
            res.locals.user = user;
            next();     
        }   
    });
}

и спасибо Микаэлю Б за вашу помощь

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