Ich benutze Express-Router, um die Routen in meiner Anwendung zu bauen, und ich versuche benutzerdefinierte Middleware auf jede Route anzuwenden, so dass die Middleware nur aufgerufen wird, wenn URLs für diesen bestimmten Router getroffen werden. Hier ist mein Code:Express-Middleware wird nicht aufgerufen
const express = require('express');
const router = express.Router();
const authentication = require('./helpers/authentication');
const registerController = (app, path, router, middleware) => {
middleware.forEach((routerMiddleware) => {
router.use(routerMiddleware);
});
app.use(path, router);
};
const testMiddleware = (request, response, next) => {
console.log(request.originalUrl);
next();
};
module.exports = {
init: (app) => {
registerController(app, '/auth', require('./authenticationController'), [testMiddleware]);
registerController(app, '/customer', require('./customerController'), [authentication, testMiddleware]);
registerController(app, '/filter', require('./filterController'), [authentication, testMiddleware]);
registerController(app, '/', require('./homeController'), [testMiddleware]);
registerController(app, '/inventory', require('./inventoryController'), [authentication, testMiddleware]);
registerController(app, '/settings', require('./settingsController'), [authentication, testMiddleware]);
}
};
ich die registerController Methode aufgebaut haben, so kann ich Middleware in verschiedenen Konfigurationen zu den verschiedenen Routern zuweisen. Jede erfordert Anweisung, die in einem Dateinamen zieht xxxController ist einen Router wie diese Rückkehr:
const router = require('express').Router();
const fs = require('fs');
router.get('/', (request, response) => {
const file = fs.readFileSync(__dirname + '/../index.html', "utf8");
response.send(file);
});
module.exports = router;
ich die Test-Middleware hinzugefügt, um zu sehen, ob die einfachste Middleware funktionieren würde, aber es wird nicht genannt zu werden. Was mache ich hier falsch?
Tatsächlich verwenden die verschiedenen Anrufe nicht die gleiche Instanz des Routers. Sie denken wahrscheinlich, dass es einen Verweis auf den Router am Anfang der Datei gibt. Dies war ein Fehler meinerseits, da dies jetzt eine ungenutzte Variable ist. Jeder Aufruf von registerController nimmt einen Router als dritten Parameter und bei jedem Aufruf übergebe ich den Rückgabewert einer require-Anweisung. Alle diese erfordern Anweisungen eine andere Instanz von Express-Router zurückgeben. – jdavis