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) {
var _ = require('underscore')
, nonSecurePaths = ['/', '/about', '/contact'];
if ( _.contains(nonSecurePaths, req.path) ) return next();
//authenticate user
next();
}
User.checkUser
をミドルウェアとして直接登録する代わりに、すべてのURLで呼び出されるが特定のURLでのみuserFiled`に実行を渡すcheckUserFilter
などの新しいヘルパー関数を登録します。例:
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で試してみましたが、機能しません。
おそらく 新しいチケットを開く で、これを機能として提案できますか?
ミドルウェアは各ルートごとに設定できます。
// 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)
})
つかいます
app.use(/^(\/.+|(?!\/).*)$/, function(req, resp, next){...
これは、/以外のURLを渡します。場合を除き、それは私のために動作します。
一般に
/^(\/path.+|(?!\/path).*)$/
( 正規表現で特定の単語を無効にする方法 を参照)
お役に立てれば
express-unless と呼ばれるこのライブラリを使用します
パスがindex.htmlでない限り、すべてのリクエストに認証を要求します。
app.use(requiresAuth.unless({
path: [
'/index.html',
{ url: '/', methods: ['GET', 'PUT'] }
]
}))
パスは、文字列、正規表現、またはそれらの配列のいずれかです。また、URLとメソッドのキーペアであるオブジェクトの配列にすることもできます。要求パスまたはパスとメソッドが一致する場合、ミドルウェアは実行されません。
このライブラリはきっとあなたを助けます。