2015-04-05 6 views
18

Im Express docs, heißt es:Was ist der Unterschied zwischen Application- und Router-Level - Middleware beim Routing in Express?

Anwendungsebene Middleware wird auf eine Instanz ausdrücklich gebunden, app.use mit() und app.VERB().

Router-Level-Middleware funktioniert genauso wie Middleware auf Anwendungsebene, außer dass sie an eine Instanz von express.Router() gebunden sind. Das im obigen Beispiel auf Anwendungsebene erstellte Middleware-System kann mit dem folgenden Code auf Router-Ebene repliziert werden.

In der App vom Generator Express zur Verfügung gestellt, die ich in der Haupt app.js sehen, gibt es:

var routes = require('./routes/index'); 
app.use('/', routes); 

Und in ./routes/index.js, sehe ich:

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

/* GET home page. */ 
router.get('/', function(req, res, next) { 
    res.render('index', { title: 'Express' }); 
}); 

module.exports = router; 

Was das ist Zweck von app.use übergibt es an router.get anstatt einfach app.get zu verwenden? Und im Allgemeinen, was ist der Unterschied zwischen app.VERB und router.VERB in Bezug auf Routing?

Antwort

17

Was ist der Zweck von app.use, es an router.get zu übergeben, anstatt einfach app.get zu verwenden?

Dies ist alles nur für Modularität entwerfen. Dadurch kann eine Anwendung in mehrere kleinere lose gekoppelte Teile unterteilt werden, und da sie keine direkte Kenntnis der gemeinsamen Instanz haben, wird die Modularität erreicht.

Zum Beispiel könnten Sie ein ganzes Benutzeraccount-Subsystem erstellen, das Anmeldung, Login, Passwort vergessen, etc., und teilen Sie es zwischen mehreren verschiedenen Anwendungen durch "Montage" in ihnen über app.use(require("my-user-system")).

Das ist der einzige Zweck dahinter. Ansonsten gibt es keinen funktionalen, technischen oder Leistungsunterschied.

Und in der Regel, was ist der Unterschied zwischen app.VERB und router.VERB in Bezug auf Routing?

Kein Unterschied. Die App hat ihren eigenen Haupt/Haupt-Router und app.VERB ist nur Bequemlichkeit Zucker für das Äquivalent von app.router.VERB.

+0

So 'express.Router()' und 'app = express()' das gleiche Objekt sein? –

3

Ein Beispiel wird hier helfen:

In dem birds.js:

// birds.js 

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

// middleware that is specific to this router 
router.use(function timeLog(req, res, next) { 
    console.log('Time: ', Date.now()); 
    next(); 
}); 
// define the home page route 
router.get('/', function (req, res) { 
    res.send('Birds home page'); 
}); 

In dem app.js:

// app.js 

var birds = require('./birds'); 
app.use('/birds', birds); 

fordert nun zu http://localhost:3000/birds/ zu birds.js gehen Datei.

Dieser modulare Ansatz erleichtert die Verwaltung einer großen Codebasis, wenn die Anwendung wächst.

Quelle: https://expressjs.com/en/guide/routing.html

Verwandte Themen