NodeJS / ExpressJS - 处理路由中的多个中间件的问题

时间:2016-11-15 13:29:42

标签: node.js express

我有以下情况。我有一条路线对发布请求作出反应。在路线内部,我认为将代码拆分为模块会更好,以便更好地组织我正在处理的项目。

我提出的解决方案并不理想,因为如果存在异步代码,则路由将一直持续到next()语句,并以404响应。

其中,我希望响应来自模块,并且只有if状态失败才执行next()。让用户知道提供的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 个答案:

答案 0 :(得分: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;