2017-07-06 4 views
0

Hallo Leute, ich habe diese zwei Variablen, ich brauche sie für jede Route, die ich habe, also möchte ich sie globalisieren und sie nur zur app.js hinzufügen, aber wenn ich das mache didn ' t arbeiten.globize meine Knotenvariable express und route

var express = require('express'); 
var router = express.Router(); 

Ich habe versucht, sie in meiner eigenen Datei config.js addd und dann in meiner Route i benötigen sie und weisen sie auf variable und es verwenden, aber es funktioniert nicht.

meine Config-Datei aussehen wie dieses

/** 
* Module dependencies. 
*/ 
var express = require('express'), 
    favicon = require('serve-favicon'), 
    logger = require('morgan'), 
    bodyParser = require('body-parser'), 
    methodOverride = require('method-override'), 
    errorHandler = require('errorhandler'), 
    path = require('path'); 



module.exports = function() { 
    var app = express(); 
var router = app.Router(); 


    return app; 
}(); 

ich diesen Fehler bekommen die ganze Zeit: throw new Error ('\' app.router \‘ist veraltet \ die 3.x auf 4 nGeben zu sehen! .x Migrationsleitfaden für Details zum Aktualisieren Ihrer App. ');

+0

Haben Sie versucht mit nicht app.Router() verwenden, wie der Fehler sagt? –

+0

Auch sie in allen Ihren Router erfordert, ist nicht wirklich ein Problem –

Antwort

1

TLDR: Ihre router Variable ist eine Instanz von Router und sollte innerhalb jedes Ihrer Route Dateien initialisiert werden. Ich kann es schätzen zu versuchen, so trocken wie möglich zu sein, aber es wird nicht so funktionieren, wie Sie es erwarten. Sie können ein wenig Tipparbeit ersparen, indem es auf diese Weise zu schreiben:

var router = require('express').Router(); 

Die längere Erklärung ist, dass mehrere Routen zu verwenden, benötigen Sie einen Router für jede Route. Dies dient dazu, den gesamten Pfad, der mit einer Anforderung verknüpft ist (d. H. /bar/foo/baz), in überschaubare Abschnitte aufzuteilen.

Angenommen, Ihr Pfad kann entweder mit /cats oder /dogs beginnen. In der Datei, wo Sie alle Ihre Middleware erklären, könnten Sie schreiben:

var catRoute = require(./routes/cats) 
var dogRoute = require(./routes/dogs) 

app.use('/cats', catRoute) 
app.use('/dogs', dogRoute) 

Dann innen cats.js:

var router = require('express').Router(); 
router.get('/whiskers', (req, res) => { 
    res.send('Cat whiskers!') 
} 
module.exports = router; 

Was dies tut, ist die App sagen, ob es einen Weg mit /cats Start erhält, Einsatz die Katzenroute, die nur ein weiteres Stück Middleware ist. Innerhalb der Route selbst müssen wir nicht /cats/whiskers, nur /whiskers angeben, da app nur den Teil des Pfades nach/cats an die Katzen weitergibt.

Sie können so viele Router verschachteln, wie Sie möchten. Ein gutes Beispiel dafür, wie man das macht, ist this article.

Hypothetisch, könnten Sie nur ein Router

+0

Dank Mann, was Sie geschrieben ist vollkommen richtig und es sollte funktionieren, aber ich erhalte eine Fehlermeldung 'Typeerror: Zyklische __proto__ value' i werde es so irritierend Code verlassen –

+0

Hört sich an, als gäbe es irgendwo eine zirkuläre Abhängigkeit. Möglicherweise müssen Sie Ihren Code neu strukturieren, damit Sie keine Dateien benötigen, die sich gegenseitig benötigen. Gib nicht auf! Je nach Hintergrund kann es eine ziemlich steile Lernkurve mit Knoten geben. Sie können sich einige Beispiel-Apps auf Github ansehen [wie hier] (https://github.com/jbaumbach/nodejs-scaffolding) oder etwas wie [ Express-Generator] (https://github.com/petecoop/generator-express) –