gpt4 book ai didi

node.js - Express 中的路由可以用循环声明吗?

转载 作者:搜寻专家 更新时间:2023-10-31 22:39:11 24 4
gpt4 key购买 nike

当我尝试在下面声明时,索引页面有效,但其他页面都是 404。我知道这不是我的 links.js 文件的问题,因为当我硬编码 for 循环的输出时,链接所有的工作。我控制台记录了路由器对象,它显示了堆栈中的信息。但是,当我尝试打开任何链接时,它们显示 404,并且没有任何内容记录到控制台。

是否不能使用 for 循环来声明路由?代码复制如下。

var express = require('express');
var router = express.Router();
var config = require('../models/config.js');
var links = require('../models/links.js');

// homepage
router.get('/', function(req, res, next) {
res.render('index', { title: config.title });
});

for (var i = 0; i < links.length; i++) {
router.get(links[i].regex, function(req, res, next) {
console.log("trying to open " + links[i].url);
res.render(links[i].url, { title: links[i].title, link: links[i] });
});
}

module.exports = router;

最佳答案

问题是您没有正确关闭 links[i] 的当前值。当您的路线被调用时,i === links.length,因此 links[i] 指向您预期之外的其他内容。

解决此问题的最简单方法是简单地使用 links.forEach(),它创建/使用闭包:

links.forEach(function(link) {
router.get(link.regex, function(req, res, next) {
console.log("trying to open " + link.url);
res.render(link.url, { title: link.title, link: link });
});
});

关于node.js - Express 中的路由可以用循环声明吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33986989/

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