繁体   English   中英

来自旧版本节点中数据库的动态路由

[英]Dynamic routes from database in older version of node

我正在使用Node.js v〜4。

我正在尝试通过使用数据库中的对象来构建路由。 这是我的逻辑:

  for (page of pages) {
    app.get(`/${page.path}`, (req, res)=> {
      res.render('test', {
        page:page,
      })
    })
  }

但是,无论我访问哪个url,我总是从数据库中的最后一个对象获取内容。

因此url可以工作,但是app.get()回调函数中的代码无法正常工作。 例如page变量无效,显示最后一个对象,而不是一个匹配路径。 如果我要添加以下代码:

console.log(req.url);
console.log(page.path);

作为回调函数中的第一行,我将获得下一个输出:

到达第一个网址:

/test01
test03

到达第二个网址:

/test02
test03

动态路由和页面是否有更方便的方法?

您需要在要迭代的变量上使用 let来保留作用域-否则它将始终将路由绑定到要迭代的最后一个项目:

由于节点中不支持let ,因此请使用IIFE:

for (page of pages) {
    (function(p) {
        app.get(`/${p.path}`, (req, res)=> {
            res.render('test', {
                page:p,
            })
        })
    })(page)
}

这对我有用:

router.get('/:page', function (req, res) {
    var page = req.params.page;
    if (pages.indexOf(page) === -1) res.redirect('/');
    else res.render('index', {title: page});
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM