Javascript 当使用动态路由时,中间件功能被执行多次而不是一次

Javascript 当使用动态路由时,中间件功能被执行多次而不是一次,javascript,node.js,express,middleware,Javascript,Node.js,Express,Middleware,我有一个中间件: app.use((req, res, next) => { console.log('test'); next(); }); 我有这些动态路线: app.get('/:path', (req, res, next) =>{ var pages = serverCache.pages; for (let page of pages) { if(req.params.path === page.path){ res.render('

我有一个中间件:

app.use((req, res, next) => {
  console.log('test');
  next();
});
我有这些动态路线:

app.get('/:path', (req, res, next) =>{
  var pages = serverCache.pages;
  for (let page of pages) {
    if(req.params.path === page.path){
      res.render('foo', {
        helpers:helpers
      });
      return;
    }//if
  }//for
  res.redirect('/');
});
加载页面时,我希望只执行一次
console.log('test')
。然而,它被执行了很多次。实际产出为:

test
test
test
test
...
之所以发生这种情况,是因为它在
for
循环中的每个迭代中都会执行。只有当循环中的语句条件为true时,如何执行它

它是
o(1+验证条件的页数)

验证引擎盖下发生的事情的最简单方法是调试你的nodejs应用程序,如果你不能像下面这样在两者之间放置一些日志

app.get('/:path', (req, res, next) =>{
  console.log('Get/:path'); //NOTICE HERE
  var pages = serverCache.pages;
  for (let page of pages) {
    if(req.params.path === page.path){
      console.log('rendering foo'); //NOTICE HERE
      res.render('foo', {
        helpers:helpers
      });
      return;
    }//if
  }//for
  console.log('redirecting to /'); //NOTICE HERE
  res.redirect('/');
});
它是
o(1+验证条件的页数)

验证引擎盖下发生的事情的最简单方法是调试你的nodejs应用程序,如果你不能像下面这样在两者之间放置一些日志

app.get('/:path', (req, res, next) =>{
  console.log('Get/:path'); //NOTICE HERE
  var pages = serverCache.pages;
  for (let page of pages) {
    if(req.params.path === page.path){
      console.log('rendering foo'); //NOTICE HERE
      res.render('foo', {
        helpers:helpers
      });
      return;
    }//if
  }//for
  console.log('redirecting to /'); //NOTICE HERE
  res.redirect('/');
});

我误解了什么时候执行该功能

它被执行多次的原因是,它为它检查的每个路由执行自身。(用于以后的所有中间件功能)

为了让它只对我的动态路由执行,我将这两个函数都移到了底部

app.get('static route')
app.post('static route')
app.use('static route')
app.use(); // moved it here
app.get('dynamic route')

我误解了什么时候执行该功能

它被执行多次的原因是,它为它检查的每个路由执行自身。(用于以后的所有中间件功能)

为了让它只对我的动态路由执行,我将这两个函数都移到了底部

app.get('static route')
app.post('static route')
app.use('static route')
app.use(); // moved it here
app.get('dynamic route')

这是由于迭代引起的:
for(让一页一页)?如果您的页面没有发送任何响应(没有页面验证该条件),它将变成
o(1+1)
。是每个
res.render('foo',{helpers:helpers})
executed将记录
test
。我知道,但当该路由被命中时,它应该只执行
res.render
一次,因为它嵌套在
if
语句中,该语句只能是
true
,如果找到
页面
,并且
页面路径
在数据库中是唯一的,因此它将始终是一次或零。为什么它仍然执行该函数?我如何防止这种情况发生?我已经更新了我的答案,请检查一下,并让我知道是什么原因导致了迭代:
for(let page of pages)?如果您的页面没有发送任何响应(没有页面验证该条件),它将变成
o(1+1)
。是每个
res.render('foo',{helpers:helpers})
executed将记录
test
。我知道,但当该路由被命中时,它应该只执行
res.render
一次,因为它嵌套在
if
语句中,该语句只能是
true
,如果找到
页面
,并且
页面路径
在数据库中是唯一的,因此它将始终是一次或零。为什么它仍然执行该函数?我怎样才能避免呢?我已经更新了我的答案,请检查一下,让我知道它打印了什么