1. ホーム
  2. node.js

[解決済み] Expressで特定のパス以外のすべてのパスに特定のミドルウェアを使用する

2023-01-20 13:19:27

質問

node.jsでExpressフレームワークを使用して、いくつかのミドルウェア機能を使用しています。

var app = express.createServer(options);
app.use(User.checkUser);

を使うことができる。 .use 関数にパラメータを追加することで、特定のパスでのみこのミドルウェアを使用することができます。

app.use('/userdata', User.checkUser);

パス変数を使用して、特定のパス、すなわちルートパス以外のすべてのパスに対してミドルウェアを使用することは可能でしょうか?

このようなことを考えています。

app.use('!/', User.checkUser);

そこで User.checkUser はルートパス以外では常に呼び出されます。

どのように解決するのですか?

ホームページ以外のすべてのパスにcheckUserミドルウェアを追加するのです。

app.get('/', routes.index);
app.get('/account', checkUser, routes.account);

または

app.all('*', checkUser);
    
function checkUser(req, res, next) {
  if ( req.path == '/') return next();

  //authenticate user
  next();
}

これを拡張して、非認証パスの配列からreq.pathを検索することができます。

function checkUser(req, res, next) {
  const nonSecurePaths = ['/', '/about', '/contact'];
  if (nonSecurePaths.includes(req.path)) return next();

  //authenticate user
  next();
}