gpt4 book ai didi

node.js - 可以通过 for 循环使用 express.js 创建许多 app.get 调用吗?

转载 作者:搜寻专家 更新时间:2023-11-01 00:46:32 25 4
gpt4 key购买 nike

这是我的第一篇文章,所以在此先感谢您的帮助:)

我正在尝试制作我的 main.js 文件并使事情变得更容易我想做这样的事情:

var pages = {
"/profile":{"page":"My Profile","loc":"./contentPages/profile"},
...
...
...
};

for (var item in pages) {
app.get(item, function(req, res){
if(req.session.user_id == null){
res.redirect('/');
return;
}


res.render(pages[item].loc, {
title:pages[item].page,
thisPage:pages[item].page
});
});
}

现在无论发生什么,我在字典中的最后一个总是呈现的页面。有没有办法做这样的事情,或者我必须写出我想创建的每个页面?

非常感谢!

最佳答案

问题是 function(req, res) 创建的所有闭包都引用同一个变量 (item) '被调用而不是创建它们时的名称,这将是最后一个。

最直接的解决方法是使用辅助函数创建闭包:

function makeHandler(item) {
return function(req, res) {
// copy body of handler function here
};
}

然后将循环体替换为:

app.get(item, makeHandler(item));

现在每个处理程序都有自己的 item 私有(private)副本,该副本始终保留其创建时的值。

您也可以使用立即函数调用来创建闭包,但这会使代码看起来有点困惑。

关于node.js - 可以通过 for 循环使用 express.js 创建许多 app.get 调用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11787416/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com