我想做什么
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"));
但它完全阻止了以下所有路线。
我想要一个干净的解决方案,另一个不干净的选择是将中间件添加到各个路由,但是这些混乱的代码无休止地。
答案 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;