当我尝试声明下面的内容时,索引页面有效,但其他页面都是404.我知道我的links.js文件没有问题,因为当我硬编码输出时循环,链接都工作。我console.log路由器对象,它显示堆栈中的信息。但是当我尝试打开任何链接时,它们是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;
答案 0 :(得分:9)
问题是您没有围绕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 });
});
});