我想知道如何检查一个URL字符串是否存在于一个Express应用程序中,以便我可以触发一个主题变化。
现在我有一个简单的router.get函数。
router.get('/', function(req, res, next) {
res.render('index', { title: 'Home' });
});
我想做的是能够检查某个字符串的url,例如 "Toy",然后基于这个触发器,jadepug显示一个不同的图形。
store.org
trigger main Graphic
toystore.org
trigger a different graphic
然后通过某种方式,让我可以在pugjade中改变主题。 有什么想法?
我想简单地做一个string.match,然后在一个regex中查找,但那是行不通的,因为我需要能够操纵这个触发器来改变pugjade中的Them。
如果你想根据请求的一些条件来修改一个视图,你可以这样做。
在中间件中检查条件,然后在请求或响应对象中添加一个自定义属性。
以后再用吧
在 app.js
上面的路由。
const checkTheme = (req, res, next) => {
if(req.hostname === "store.org" {
res.locals.theme = "graphic"
} else {
res.locals.theme = "other-graphic"
}
next();
};
app.use(checkTheme);
然后在你需要的地方检查res.locals.topic的值就可以了
EDIT:在不知道你的具体意思的情况下,回答你关于 "显示不同的图形 "的附加问题是很困难的。
如果你想用完全不同的元素显示一个页面,你应该创建2个页面,然后选择哪个页面在你的控制器中渲染。
const getIndexBasedOnUrl = (req, res, next) => {
if(res.locals.theme === 'graphic') {
res.render('index/graphic');
} else {
res.render('index/other-graphic');
}
};
如果你只想做微小的改变,只需要在你的视图中检查值,然后使用... ... if
有得改
if theme === 'graphic'
h2.green Description
else
h2.red Description
你甚至可以使用条件来导入不同的css文件。