是否有方法从node.js express basicAuth处理程序返回5XX错误?

是否有方法从node.js express basicAuth处理程序返回5XX错误?,node.js,express,Node.js,Express,My express应用程序使用以下基本身份验证功能: exports.basicAuth = express.basicAuth(function (user, pass, callback) { findUserByEmail(user, function (err, account) { var isPasswordMatch = false;

My express应用程序使用以下基本身份验证功能:

exports.basicAuth = express.basicAuth(function (user, pass, callback) {              
    findUserByEmail(user, function (err, account) {                                  
        var isPasswordMatch = false;                                                 
        log.info("Authenticate request user-pass: " + user + ":" + pass);            
        if (err) {                                                                   
            log.info("Error occurred when authenticate user: " + err);                                                                  
        }                                                                            
        if (account == null || account == undefined) {                               
            log.info("Account not found");                                           
        } else {                                                                     
            if (!isActive(account)) {                                                
                log.info("Account is not active");                                   
            }                                                                        
            if (account.password != encryptPassword(account.salt, pass)) {           
                log.info("Wrong pass");                                              
                isPasswordMatch = false;                                             
            } else {                                                                 
                isPasswordMatch = true;                                              
            }                                                                            
        }                                                                            

        var authenticated = err == null && account != null && account != undefined && isActive(account) && isPasswordMatch;
        callback(null, authenticated);                                          
    });                                                                              
});

有时,当服务器过载时,
findUserByEmail
请求将失败。在这种情况下,上述函数会导致服务器返回401错误。相反,我希望返回一个5XX错误代码,以便客户机知道服务器有问题,而不一定是他们传递的凭据有问题。导致FindUserByMail中出现错误的最佳方法是返回5XX错误代码而不是401?

我找到了一个解决方案。我只是将身份验证处理程序包装在一个标准的请求处理程序中,并在出现问题时发送一个错误响应

exports.basicAuth = function(req, res, next) {                                   
    express.basicAuth(function (user, pass, callback) {                          
        findUserByEmail(user, function (err, account) {                          
            var isPasswordMatch = false;                                         
            log.info("Authenticate request user-pass: " + user + ":" + pass);    
            if (err) {                                                           
                log.info("Error occurred when authenticate user");               
                res.send(500, { error: 'Unable to authenticate request' });      
                return;                                                          
            }             
            ...                                      
        });                                                                      
    })(req, res, next);                                                          
};                                                                               

我对express不太熟悉,无法提供实际答案,但我认为如果您将实际错误作为第一个参数传递给
回调
则可能会得到您想要的结果。不,仍然返回401。您可以尝试在代码中抛出错误。如果您有错误处理中间件,它将捕获它,您可以在其中抛出500。