我正在使用Node.js v~4。
我正在尝试使用数据库中的对象来构建路由。这是我的逻辑:
for (page of pages) {
app.get(`/${page.path}`, (req, res)=> {
res.render('test', {
page:page,
})
})
}
但是,无论我访问哪个URL,我总是从数据库中的最后一个对象获取内容。
所以网址有效,但app.get()
回调函数内的代码无法正常工作。例如,page
变量无效,显示最后一个对象,而不是一个匹配路径。如果我要添加此代码:
console.log(req.url);
console.log(page.path);
作为回调函数内的第一行,我会得到下一个输出:
点击第一个网址:
/test01
test03
点击第二个网址:
/test02
test03
动态路由和页面是否有更方便的方法?
答案 0 :(得分:1)
你需要在迭代的变量上使用 < / p>
let
来保留范围 - 否则它总是将路由绑定到迭代的最后一个项目:
由于节点不支持let
,因此请使用IIFE:
for (page of pages) {
(function(p) {
app.get(`/${p.path}`, (req, res)=> {
res.render('test', {
page:p,
})
})
})(page)
}
答案 1 :(得分:1)
这对我有用:
router.get('/:page', function (req, res) {
var page = req.params.page;
if (pages.indexOf(page) === -1) res.redirect('/');
else res.render('index', {title: page});
});