是否有可能在Expressjs中有条件路线?

时间:2018-03-26 15:35:14

标签: node.js express

我想做什么

if req is from mobile

first check these routes
router.use('/', mobileRoutes);

then ones below
router.use('/', routes);

但据我所知,express会在每个请求中遍历所有use语句,它会运行一次并将路由处理程序放入某种数组中。受到请求的影响。

对于某些网址,我想要服务于不同的页面,但不是全部(loginPage,registrationPage等)。

是否可以进行条件路由,以便在满足某些条件的情况下预先添加更多路由。

我的工作是:

router.use(function (req, res, next) {
    let md = new MobileDetect(req.headers["user-agent"]);
    if (md.mobile()) {
        req.url = '/mobile'+req.url;
    }
    next();
});

//mobile routes
router.use("/mobile", require("./mobile"));

但它完全阻止了以下所有路线。

我想要一个干净的解决方案,另一个不干净的选择是将中间件添加到各个路由,但是这些混乱的代码无休止地。

1 个答案:

答案 0 :(得分:0)

我的条件路由解决方案:

<强> index.js

 .....
//mobile routes
router.use("/", require("./mobile"));

router.get("/", require("./get"));
.....

<强> mobile.js

const express = require("express");
const router = express.Router();
const MobileDetect = require("mobile-detect");

router.use(function (req, res, next) {
    let md = new MobileDetect(req.headers["user-agent"]);
    (md.mobile())? next() : next("router")
});


router.get("/", function (req, res) {
    res.send({ query: req.query });
});


module.exports = router;