2017-01-13 8 views
1

私はこのようなルートを持っています:/products/123/versions/456ExpressJS - パラメタではないURLの任意の部分ですか?

私は、サブリソースはオプションになりたいので、私は/products/123/products/123/versions/456の両方を処理するための1つのルートのパスをしたいです。

これは動作しません:/products/:pid/versions?/:vid?

/versions/の部分を、: ..とパラメータを付けずにオプションにする方法を教えてください。

答えて

0

あなたは、名前のハンドラを作成し、二つの経路のためにそれを使用することができます。

function yourhandler(req, res) { 
    // ... 
} 
app.get('/products/:pid', yourHandler); 
app.get('/products/:pid/versions/:vid', yourHandler); 

それとも、正規表現とオプションパーツと戦うことができます。しかし、これらは実際には2つの異なる経路ではなく、一つであり、そしてちょうどあなたがそれを解決するための明確な方法を2 app.get()(またはそれが何であれHTTPメソッド)ルートの定義をされて使用してそれらの両方に同じハンドラを使用したいということが起こります。あなたにもそれを必要とする場合にも、これを追加することができます

:PID:

app.get('/products/:pid/versions', yourHandler); 
+0

おかげで...私は実際に 'router.route( '/製品/持っているように2つのを避けるためにしようとしていました(ハンドラ).put(ハンドラ).delete(ハンドラ) 'これは2回繰り返されます(ちょっと見苦しくなります)...しかし、それがベストなら方法そしてそれをも... –

0
app.get('/products/*', (req, res, next){ 

const path = req.path; 

//now use any logic on path as string 

if(path.includes('versions')){ 

console.log('run version handler'); 

}else{ 
console.log('run else handler')} 

} 

//or const [product, version] = /\/products\/(.*)\/versions\/(.*)/.exec(path) 
    } 
+0

おかげで...私はそれだけで、文字列として上のURLのチャックと仕事をつかむために少し厄介に感じているものの、動作することを確認しています。 –

関連する問題