2017-09-04 105 views
2

我的項目中有兩種模式:申請人和公司。 創建,驗證和刪除用戶發生在同一個API中。 所以,我有一箇中間件,通過它的會話ID來解析用戶模型。例如,它將用於獲取當前用戶,首先我們通過其ID接收用戶,然後發送它。 我的代碼如下:如何通過API獲取用戶

getUserByID(req, res, next) { 
if (req.session.user_id) { 
    async.race([ 
    (callback) => { 
     Applicant.findOne({_id: req.session.user_id}) 
     .catch(() => { 
      return apiHelper.handleError(res, 'Unknown error', 'Can not find user') 
     }) 
     .then(callback) 
    }, 
    (callback) => { 
     Company.findOne({_id: req.session.user_id}) 
     .catch(() => { 
      return apiHelper.handleError(res, 'Unknown error', 'Can not find user') 
     }) 
     .then(callback) 
    } 
    ], 
    (user) => { 
     if (user) { 
     res.locals.currentUser = user; 
     next() 
     } 
     return apiHelper.handleError(res, 'User not found', 'Can not log in', 400) 
    }); 
} else { 
    apiHelper.handleError(res, 'Not authed', 'Please, log in', 400) 
}} 

我有測試此路線和問題是,測試通過隨機,隨機沒有。我想這是因爲我使用的模塊異步或smthg它

+0

你使用'async.race()'的原因是什麼?用戶是申請人還是公司? – Mikey

回答

1

最終回調的第一個參數是一個錯誤的物品(如與大多數async.js功能)。請參閱example

而且當你做

if (user) { 
    res.locals.currentUser = user; 
    next(); 
} 
return apiHelper.handleError(res, 'User not found', 'Can not log in', 400); // * 

如果找到用戶,最後一行仍將執行。請務必做return next();或使用if/else

我會重構你的代碼如下。 async.js的美妙之處在於您可以將錯誤處理整合到一個地方。

getUserByID(req, res, next) { 
    if (req.session.user_id) { 
     async.race([ 
      callback => Applicant.findById(req.session.user_id, callback), 
      callback => Company.findById(req.session.user_id, callback) 
     ], 
     (err, user) => { 
      // note the use of return to prevent execution of any following lines 
      if (err) 
       return apiHelper.handleError(res, 'Unknown error', 'Can not find user', 500); 
      if (!user) 
       return apiHelper.handleError(res, 'User not found', 'Can not log in', 400); 
      res.locals.currentUser = user; 
      next(); 
     }); 
    } else { 
     apiHelper.handleError(res, 'Not authed', 'Please, log in', 400) 
    } 
}; 
0

試試這個

getUserByID(req, res, next) { 
if (req.session.user_id) { 
    async.race([ 
    (callback) => { 
     Applicant.findOne({_id: req.session.user_id}) 
     .catch(() => { 
      return apiHelper.handleError(res, 'Unknown error', 'Can not find user') 
     }) 
     .then(callback) 
    }, 
    (callback) => { 
     Company.findOne({_id: req.session.user_id}) 
     .catch(() => { 
      return apiHelper.handleError(res, 'Unknown error', 'Can not find user') 
     }) 
     .then(callback) 
    } 
    ], 
    (user) => { 
     if (user) { 
     res.locals.currentUser = user; 
     return next(); // added return statement 
     } 
     return apiHelper.handleError(res, 'User not found', 'Can not log in', 400) 
    }); 
} else { 
    apiHelper.handleError(res, 'Not authed', 'Please, log in', 400) 
}} 
+0

不工作:( – graver

相關問題