簡體   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