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
,如果找到页面
,并且页面路径
在数据库中是唯一的,因此它将始终是一次或零。为什么它仍然执行该函数?我怎样才能避免呢?我已经更新了我的答案,请检查一下,让我知道它打印了什么