我有这个中间件:
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
循环内的每次迭代执行的。只有当该循环中的if
语句条件为真时,我该如何执行它?
答案 0 :(得分:2)
我误解了什么时候会执行功能。
它被多次执行的原因是因为它为它检查的每个路由执行自己。 (之后的所有中间件函数)
为了只对我的动态路由执行,我将这两个函数都移到了底部。
app.get('static route')
app.post('static route')
app.use('static route')
app.use(); // moved it here
app.get('dynamic route')
答案 1 :(得分:1)
是o(1 + count of pages verifying the condition)
。
验证幕后发生的事情的最简单方法是调试你的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('/');
});