2015-11-29 8 views
5

Wenn ich versuche, das unten zu erklären, funktioniert die Indexseite, aber die anderen Seiten alle 404. Ich weiß, dass es kein Problem mit meiner links.js-Datei ist, da, wenn ich die Ausgabe der for-Schleife fest codiere Arbeit. Ich console.logged das Router-Objekt und es zeigt die Informationen im Stapel. Aber wenn ich versuche, einen der Links zu öffnen, 404, und nichts wird in der Konsole protokolliert.Können Routen in Express mit einer Schleife deklariert werden?

Ist es nicht möglich, Routen mit einer for-Schleife zu deklarieren? Der Code wird kopiert.

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; 

Antwort

7

Das Problem ist, dass Sie nicht über eine ordnungsgemäße Schließung um den aktuellen Wert von links[i] haben. Zu dem Zeitpunkt, an dem Ihre Routen aufgerufen werden, zeigt i === links.length, also links[i] auf etwas anderes als das, was Sie erwarten.

Der einfachste Weg, um dies ist einfach links.forEach() stattdessen zu verwenden, die erstellt/verwendet einen Verschluss:

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 }); 
    }); 
}); 
+0

'foreach()' und 'for'-Schleife ist verschieden, wie ich in meiner Antwort zur Kenntnis genommen. Wenn Ihre Route-Handler aufgerufen würden, würden Sie den Unterschied in der Ausgabe sehen. Wie auch immer, wenn Ihre Route-Handler nicht aufgerufen werden, sollten Sie Ihre '.regex'-Werte (doppelt) überprüfen. – mscdex

Verwandte Themen