Expressを使用して、/articles/:year/:month/:day
の形式のルートを処理しています。ここで、年、月、日はオプションです。
私の質問は、どのようにオプションにするのですか?私が定義した現在のルートでは、3つのパラメーターすべてが存在しない限り、解決できず、デフォルトルートに分類されます。
expressjsのガイド ルーティングの言及:
Expressは
path-to-regexp
ルートパスの一致。ルートパスを定義する際のすべての可能性については、正規表現へのパスのドキュメントを参照してください。 Express Route Tester は、基本的なExpressルートをテストするための便利なツールですが、パターンマッチングはサポートしていません。
基本的に、?
文字は、パラメーターをオプションにします。
/articles/:year?/:month?/:day?
1つの回答に3つの異なるオプションがあるという目的のために編集されています。彼の正規表現の回答は@ hjpotter92の功績によるものです。
RLパラメータを使用
regexを使用
app.get('/articles/:year?/:month?/:day?', function(req, res) {
var year = req.params.year; //either a value or undefined
var month = req.params.month;
var day = req.params.day;
}
正規表現なし
var getArticles = function(year, month, day) { ... }
app.get('/articles/:year', function(req, res) {
getArticles(req.params.year);
}
app.get('/articles/:year/:month', function(req, res) {
getArticles(req.params.year, req.params.month);
}
app.get('/articles/:year/:month/:day', function(req, res) {
getArticles(req.params.year, req.params.month, req.params.day);
}
サポートする3つのパスを定義し、同じ機能を再利用します
クエリパラメータを使用
app.get('/articles', function(req, res) {
var year = req.query.year; //either a value or undefined
var month = req.query.month;
var day = req.query.day;
}
このエンドポイントのURLは次のようになります。
http://localhost/articles?year=2016&month=1&day=19
このタイプのルートは、渡されるパラメーターにアンダースコアがあるため、機能しない可能性があります。
app.get('/products/:product_Id/buyers/:buyer_Id', function(req, res) {
getArticles(req.params.product_Id, req.params.buyer_Id);
}
したがって、ルートが機能していない場合は、次のルートシステムを使用することをお勧めします。そこで、複数のパラメーターを送信できます。
app.get('/products/:productId/buyers/:buyerId', function(req, res) {
getArticles(req.params.productId, req.params.buyerId);
}