3

Express では、一致するルートから渡された引数を、ルートで定義されている順序で取得する方法はありますか?

ルートのすべてのパラメーターを別の関数に適用できるようにしたいと考えています。問題は、これらのパラメーターが事前にわかっていないため、各パラメーターを名前で明示的に参照できないことです。

app.get(':first/:second/:third', function (req) {
    output.apply(this, req.mysteryOrderedArrayOfParams); // Does this exist?
});

function output() {
    for(var i = 0; i < arguments.length; i++) {
        console.log(arguments[i]);
    }
}

呼びかけるGET: "/foo/bar/baz"

望ましい出力 (この順序で):

foo
bar
baz
4

5 に答える 5

0

非常に単純なサブシステムである Express Route params メカニズムを介して私が知る限りではありません。req.path.split('/')古き良き人はここにいるあなたの友達だと思います。

于 2013-06-24T20:54:23.197 に答える
0

あなたが欲しいのはreq.route.paramsオブジェクトだと思います。

詳細については、Express のドキュメントを参照してください。

于 2013-06-24T20:54:34.197 に答える
0

パラメータIDを使用したくないが、その順序が必要な場合は、これを行います

app.get('/:0/:1/:2', function (req,res) {
    console.log(req.params);
    console.log(req.params[0]);
    console.log(req.params[1]);
    console.log(req.params[2]);
    res.end();
});

//output

[ 'a', 'b', 'c' ]
a
b
c
GET /a/b/c 200 5ms
[ 'c', 'b', 'a' ]
c
b
a
GET /c/b/a 200 1ms

一致する順序になります

于 2013-06-25T04:17:11.650 に答える
0

あなたのタイトルは誤解を招くものです。あなたはパスを解析しようとしていますが、あなたのタイトルはパラメーターを取得しようとして見つけたものなので、回答を投稿します。

lodash を使用して、最初のパラメーター (req.params) を Mongo / ObjectId として検証しました。あなたの場合、lodashキーまたは値でインデックスを付けることができます...

req.route.keys は req.params[0] と同様に機能しませんでした

  if (_.size(req.params) === 1) {
    if (!mongoose.Types.ObjectId.isValid(_.values(req.params)[0])) {
      return res.status(500).send('Parameter passed is not a valid Mongo ObjectId');
    }
  }

于 2014-11-25T20:51:17.263 に答える