私はアプリケーションでルートを構築するためにエクスプレスルータを使用していますが、ミドルウェアはその特定のルータにヒットすると呼び出されるようにカスタムミドルウェアを各ルートに適用しようとしています。ここに私のコードは次のとおりです。Expressミドルウェアが呼び出されていない
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の各呼び出しは3番目のパラメータとしてルータを受け取り、各呼び出しでrequire文の戻り値を渡します。これらのすべてのステートメントは、エクスプレスルータの別のインスタンスを返します。 – jdavis