2016-11-15 121 views
0

我有以下情況。我有一條可以發佈請求的路由。在路線內部,我認爲將代碼分成模塊會更好,以便更好地組織我正在進行的項目。NodeJS/ExpressJS - 處理路由中的多箇中間件的問題

,我想出瞭解決辦法,是不理想的,因爲如果有異步代碼,那麼路由將去,直到next()聲明,並配有404

迴應在哪裏,我想回應是來自模塊,並且只執行next(),如果if狀態失敗。讓用戶知道提供的URL是錯誤的。

我想有一箇中間件的相同行爲,但我無法弄清楚是否有可能在路由中有一箇中間件。

問題

這可能嗎?

代碼

let express = require('express'); 

let router = express.Router(); 

router.post('/:action/:channel_id', function(req, res, next) { 

    if(req.params.action == 'default') 
    { 
     require('./alerts/default.js')(req, res); 
    } 

    if(req.params.action == 'error') 
    { 
     require('./alerts/error.js')(req, res); 
    } 

    if(req.params.action == 'warning') 
    { 
     require('./alerts/warning.js')(req, res); 
    } 

    next(); 

}); 

module.exports = router; 

回答

1

您可以使用if..elseswitch..case如下。

方法1:(使用if..else

let express = require('express'); 

let router = express.Router(); 

router.post('/:action/:channel_id', function(req, res, next) { 

    if(req.params.action == 'default') 
    { 
     require('./alerts/default.js')(req, res); 
    } 
    else if(req.params.action == 'error') 
    { 
     require('./alerts/error.js')(req, res); 
    } 
    else if(req.params.action == 'warning') 
    { 
     require('./alerts/warning.js')(req, res); 
    } 
    else { 
     res.status(404).send('Url does not exists'); 
     //next(); 
    } 

}); 

module.exports = router; 

方法2:(使用switch..case

let express = require('express'); 

let router = express.Router(); 

router.post('/:action/:channel_id', function(req, res, next) { 

    switch (req.params.action) { 
     case 'default': 
     require('./alerts/default.js')(req, res); 
     break; 
     case 'error': 
     require('./alerts/error.js')(req, res); 
     break; 
     case 'warning': 
     require('./alerts/warning.js')(req, res); 
     break; 
     default: 
     res.status(404).send('Url does not exists'); 
     // next(); 
     break; 
    } 
}); 

module.exports = router; 
+0

哈!我被困在中間件的想法中,我沒有想出簡單的解決方案:)謝謝! :) –