【问题标题】:Conditional Routing in ExpressExpress 中的条件路由
【发布时间】:2022-02-01 09:08:33
【问题描述】:

我有 4 个控制器用于 4 种不同的情况。我试图根据不同的请求查询从同一端点调用 4 个控制器。我已经实现了如下逻辑:

const express = require('express');
const quesController = require('../controllers/quesController');

const router = express.Router();

router.route('/').get((req, res) => {
    const topic = req.query.topic.toLowerCase();
    const difficulty = req.query.difficulty.toLowerCase();

    if (topic === 'random' && difficulty === 'random') {
        quesController.getQuestionRandom(req, res);
    } else if (topic === 'random') {
        quesController.getQuestionByDiff(req, res);
    } else if (difficulty === 'random') {
        quesController.getQuestionByTopic(req, res);
    } else {
        quesController.getSpecificQuestion(req, res);
    }
});

module.exports = router;

有没有其他方法来做这种类型的条件路由?

【问题讨论】:

  • 这里没有错,您可以在控制器而不是路由器内部处理条件。只是让业务逻辑远离路由。
  • 我会使用 res.redirect 重定向到正确的端点,基于可以在中间件或路由处理程序中声明的条件。
  • @RahulSharma 感谢您的建议。在区分业务逻辑时我感到困惑
  • @AndresReneGutierrezT 如果您在答案中添加一个示例将非常有帮助

标签: node.js express node-modules express-router


【解决方案1】:

这是您要求的示例。

const express = require('express');
const quesController = require('../controllers/quesController');

const router = express.Router();
router.get('/topic-and-difficulty-random', quesController.getQuestionRandom);
router.get('/topic-random', quesController.getQuestionByDiff);
router.get('/difficulty-random', quesController.getQuestionByTopic)
router.get('/other-case', quesController.getSpecificQuestion)
router.get('/', (req, res) => {
    const topic = req.query.topic.toLowerCase();
    const difficulty = req.query.difficulty.toLowerCase();

    if (topic === 'random' && difficulty === 'random') {
        return res.redirect('/topic-and-difficulty-random');
    } else if (topic === 'random') {
        return res.redirect('/topic-random');
    } else if (difficulty === 'random') {
        return res.redirect('/difficulty-random');
    } else {
        return res.redirect('/other-case');
    }
});

module.exports = router;

使用这种方法,您可以为每种情况生成特定的端点,主路由负责根据条件重定向到特定的端点,如果您想直接访问客户端中的特定端点,这种方法可以促进重用。

【讨论】:

    猜你喜欢
    • 2021-02-24
    • 2023-03-25
    • 2021-08-17
    • 1970-01-01
    • 2019-06-09
    • 2018-01-10
    • 2016-04-11
    • 2020-11-30
    • 2017-10-07
    相关资源
    最近更新 更多