(узел: 3966) UnhandledPromiseRejectionWarning: Ошибка: querySrv ECONNREFUSED - PullRequest
0 голосов
/ 28 мая 2020

Я пытаюсь исправить ошибку UnhandledPromiseRejectionWarning: Error: querySrv ECONNREFUSED при выполнении вызова ax ios для получения пользовательских данных из запроса mon goose без подключения inte rnet. Я попытался обернуть оба запроса mon goose User.findOne() и mongoose.connect() на try catch, но ошибка все равно осталась.

(node: 3966) UnhandledPromiseRejectionWarning: Ошибка: querySrv ECONNREFUSED _mongodb._tcp.cluster1-94jth.mongodb. net [0] в QueryReqWrap.onresolve [as oncomplete] (dns. js: 196: 19) [0] (узел: 3966) UnhandledPromiseRejectionWarning: обещание отклонения. Эта ошибка возникла либо из-за выброса внутри функции asyn c без блока catch, либо из-за отклонения обещания, которое не было обработано с помощью .catch (). (идентификатор отказа: 1) [0] (узел: 3966) [DEP0018] DeprecationWarning: необработанные отклонения обещаний устарели. В будущем необработанные отклонения обещаний завершат процесс Node.js с ненулевым кодом выхода.

FRONT-END

client. js

try {                           
        const res = await axios.get('/auth/user?', {
                params: {
                    refreshToken: refreshToken,                   
                    userID: userID
                }
            }
        );                      
        console.log(res.data);
    } catch (error) {
        if(error.toJSON().message === 'Network Error'){
            alert('no internet connection');                                
        }
    }

BACK-END

auth.routes. js

auth.get(
  '/user',
  async(req, res)=>{    
    try {
      const {userID, refreshToken, uniqueDeviceID, authTimestamp} = req.query;
      const existingUser = await User.findOne({
        $and: [
            {'user_id': userID},
            {'refresh_token': refreshToken}
        ]
      });    
      res.send(existingUser);
    } catch (error) {
      console.log(error);
    } 
  }
);

server. js

try {
    mongoose.connect(keys.mongoURI, {useNewUrlParser: true, useUnifiedTopology: true, useCreateIndex: true});    
    console.log('Database Connected');
} catch (error) {
    console.log(error);    
}    

Ответы [ 2 ]

4 голосов
/ 28 мая 2020

Обертывание mongoose.connect с try/catch не будет работать, потому что это не делает async/await.

Вам необходимо:

mongoose.connect(keys.mongoURI, {useNewUrlParser: true, useUnifiedTopology: true, useCreateIndex: true})
  .then(() => console.log('Database Connected'))
  .catch(error=> console.log(error));
2 голосов
/ 28 мая 2020

try/catch не будет работать с асинхронной функцией без await, поэтому, чтобы поймать ошибку из асинхронной функции:

try {
  await someAsyncFunction();
} catch (e) {
  //...
}

или вы можете использовать метод catch из Promise или даже использовать обратные вызовы .

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