我有以下情况。我有一条路线对发布请求作出反应。在路线内部,我认为将代码拆分为模块会更好,以便更好地组织我正在处理的项目。
我提出的解决方案并不理想,因为如果存在异步代码,则路由将一直持续到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;
答案 0 :(得分:1)
您可以使用if..else
或switch..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;