【问题标题】:(node:3966) UnhandledPromiseRejectionWarning: Error: querySrv ECONNREFUSED(节点:3966)UnhandledPromiseRejectionWarning:错误:querySrv ECONNREFUSED
【发布时间】:2020-09-15 21:06:36
【问题描述】:

当我在没有互联网连接的情况下进行 axios 调用以从 mongoose 查询中获取用户数据时,我正在尝试修复错误 UnhandledPromiseRejectionWarning: Error: querySrv ECONNREFUSED。我尝试用try catch 包装猫鼬查询User.findOne()mongoose.connect(),但错误仍然存​​在。

(节点:3966)UnhandledPromiseRejectionWarning:错误:querySrv ECONNREFUSED _mongodb._tcp.cluster1-94jth.mongodb.net [0] 在 QueryReqWrap.onresolve [as oncomplete] (dns.js:196:19) [0] (node:3966) UnhandledPromiseRejectionWarning:未处理的承诺拒绝。这 错误源于在异步函数内部抛出 没有 catch 块,或拒绝未处理的承诺 使用 .catch()。 (拒绝 ID:1)[0](节点:3966)[DEP0018] DeprecationWarning:不推荐使用未处理的承诺拒绝。在 未来,未处理的承诺拒绝将终止 具有非零退出代码的 Node.js 进程。

前端

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');                                
        }
    }

后端

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);    
}    

【问题讨论】:

    标签: node.js mongodb express mongoose server


    【解决方案1】:

    try/catch 包裹mongoose.connect 将不起作用,因为它没有做async/await

    你应该:

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

    【讨论】:

      【解决方案2】:

      try/catch 不能在没有await 的情况下使用异步函数 所以要从异步函数中捕获错误:

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

      或者您可以使用 Promise 中的 catch 方法,甚至使用回调。

      【讨论】:

        猜你喜欢
        • 2021-07-19
        • 1970-01-01
        • 2023-03-28
        • 2016-01-03
        • 1970-01-01
        • 2020-12-24
        • 2017-08-09
        • 2017-11-18
        • 2021-06-02
        相关资源
        最近更新 更多