Я использую экспресс-маршрутизатор для создания маршрутов в своем приложении, и я пытаюсь применить индивидуальное промежуточное ПО к каждому маршруту, поэтому промежуточное программное обеспечение будет вызываться только тогда, когда URL-адреса будут удалены для этого конкретного маршрутизатора. Вот мой код:Быстрое промежуточное программное обеспечение, не называемое
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]);
}
};
Я построил метод registerController, так что я могу назначить промежуточное программное обеспечение в различных конфигурациях для различных маршрутизаторов. Каждый требует заявления, которое втягивает в имени файла xxxController возвращается маршрутизатор, как это:
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;
я добавил тест промежуточного уровня, чтобы увидеть, если простейший промежуточный слой будет работать, но это не называется. Что я здесь делаю неправильно?
На самом деле разные вызовы не используют один и тот же экземпляр маршрутизатора. Вероятно, вы так думаете, потому что есть ссылка на экспресс-маршрутизатор в верхней части файла. Это была ошибка с моей стороны, поскольку теперь это неиспользуемая переменная. Каждый вызов registerController принимает маршрутизатор, поскольку он является третьим параметром, и в каждом вызове я передаю возвращаемое значение оператора require. Все они требуют, чтобы инструкции возвращали другой экземпляр экспресс-маршрутизатора. – jdavis