98

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

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

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

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

パス変数を使用して、特定のパス (ルート パスなど) を除くすべてのパスにミドルウェアが使用されるようにすることはできますか?

私は次のようなことを考えています:

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

SoUser.checkUserは、ルート パスを除いて常に呼び出されます。

4

7 に答える 7

162

ホームページを除くすべてのパスに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();
}
于 2012-10-16T23:01:49.483 に答える
14

ミドルウェアとして直接登録する代わりに、すべての URL で呼び出されるUser.checkUser新しいヘルパー関数を登録しcheckUserFilterますが、特定の URL でのみ userFiled` に実行を渡します。例:

var checkUserFilter = function(req, res, next) {
    if(req._parsedUrl.pathname === '/') {
        next();
    } else {
        User.checkUser(req, res, next);
    }
}

app.use(checkUserFilter);

理論的には、への正規表現パスを提供できますapp.use。たとえば、次のようなものです。

app.use(/^\/.+$/, checkUser);

Express 3.0.0rc5 で試してみましたが、うまくいきません。

たぶん、新しいチケットを開いて、これを機能として提案できますか?

于 2012-10-16T19:13:16.260 に答える
14

ルートごとにミドルウェアを設定することもできます。

// create application/x-www-form-urlencoded parser
var urlencodedParser = bodyParser.urlencoded({ extended: false })

// POST /login gets urlencoded bodies
app.post('/login', urlencodedParser, function (req, res) {
  if (!req.body) return res.sendStatus(400)
  res.send('welcome, ' + req.body.username)
})
于 2016-11-22T14:43:34.343 に答える
5

使用する

app.use(/^(\/.+|(?!\/).*)$/, function(req, resp, next){...

これは / 以外の任意の URL を渡します。そうでない限り、それは私にとってはうまくいきます。

一般に

/^(\/path.+|(?!\/path).*)$/

(正規表現で特定の単語を否定する方法を参照してください。 )

お役に立てれば

于 2015-09-22T13:28:53.997 に答える