Принудительное завершение маршрута в nodejs - PullRequest
0 голосов
/ 12 февраля 2020

В моем приложении nodejs я использую некоторые подфункции в маршруте / Restapi.

Одна из этих подфункций выглядит следующим образом:

    console.log("Before Oauth");
    await checkTheUser(clipApiID + ':' + clipApiSecret).then(res2 => {
        console.log( "Success: " + res2 );
    }).catch(error => {
        console.log('Oauth Fehler');
        //stop the route
           res.statusCode = 409; //Wrong validation
           res.json({
               success: 'Wrong validation',
               fails: 0
           });
        //End stop the route
    });
    console.log("After Oauth");

Я ожидал, что маршрут закончится после того, как произошла ошибка, и будет отправлен res. Но, наконец, маршрут продолжается до конца.

Я также пытался с помощью "return false" после отправки res, но маршрут проходит дальше.

        //stop the route
           res.statusCode = 409; //Wrong validation
           res.json({
               success: 'Wrong validation',
               fails: 0
           });
           return false;
        //End stop the route

Я добавил сообщения «До OAuth» и «После OAuth», чтобы проверить, есть ли асинхронная проблема. Но журнал показывает:

  • До OAuth
  • OAuth Fehler
  • После OAuth

Наконец я попытался с помощью next и добавил

app.use(function(err, req, res, next) {
    console.error(err.message); // Log error message in our server's console
    if (!err.statusCode) err.statusCode = 500; 
    res.status(err.statusCode).json({
        success: err.message,
        fails: 0
    }); 
});

и использование

   //stop the route
   let err = new Error(`Oauth Error`); /
   err.statusCode = 401;
   return next(err);
   //End stop the route

Я запутался, что никто из этого решения не остановит маршрут для дальнейшего выполнения. Есть идеи, что я делаю не так?

1 Ответ

0 голосов
/ 12 февраля 2020

Зачем ждать и после этого пишешь .then и .catch? И что вы подразумеваете под

Я ожидал, что маршрут закончится после того, как произошла ошибка, и будет отправлен res. Но, наконец, маршрут продолжается до конца.

Я думаю, вы неправильно поняли ожидание. Вы можете написать

checkTheUser(clipApiID + ':' + clipApiSecret).then(dataInvokedInPromiseResolve=> {
        console.log( "Success: " + dataInvokedInPromiseResolve);
    }).catch(error => {console.log(error)}

или с помощью функции, объявленной asyn c

try {
dataInvokedInPromiseResolve = await checkTheUser(clipApiID + ':' + clipApiSecret);
console.log( "Success: " + dataInvokedInPromiseResolve);
}catch (err) {console.log(err)}//don't forget to catch

Ow и остановить маршрут

.catch(error => {
    console.log('Oauth Fehler');
    //stop the route
       res.statusCode = 409; //Wrong validation
       res.json({
           success: 'Wrong validation',
           fails: 0
       });
return //add your return
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...