2

したがって、req.queryはクエリ パラメータのハッシュを返します。さらに良いことに、パラメーターが実際に json オブジェクトである場合は、それをそれぞれの json に解析します。これはすばらしいことです。

ただし、この解析をカスタマイズするにはどうすればよいですか? たとえば、特定の値を文字列ではなく数値として解析したいと考えています。確かに、事後処理を行い、返されたオブジェクトを変更できます。しかし、プロセスが一般的にカスタマイズできるかどうかを知ることは興味深い.

編集

たとえば、次のリクエストについて考えてみます。

GET http://localhost:8000/admin/api/inventory?rowsPerPage=25&page=0&q%5Bqty%5D%5B%24lt%5D=100 

それをデコードすると、次のようになります。

GET http://localhost:8000/admin/api/inventory?rowsPerPage=25&page=0&q[qty][$lt]=100

ここで、express はこれらのクエリ パラメータを次のように変換します。

req.query = {rowsPerPage: "25", page: "0", q: {qty: {$lt: "100"}}

私の問題は、「25」、「0」、および「100」にあります-それらを数字にしたいのです。したがって、req.query事後事実を変更するか、解析プロセスに干渉することができます。後者を学びたい。

4

3 に答える 3

0

クエリ文字列はここで解析されます.connect-query.jsはtjのクエリ文字列パーサーnode -querystringに基づいています. AFAIK uは、expressをフォークしてそこにある何かを変更せずにqs解析を変更することはできません。とにかく、このケースをミドルウェアで処理するか、後で文字列を数値にする必要があるアプリで処理すると、すべてのリクエストで数値をチェックするよりもパフォーマンスが向上します。

于 2012-09-20T20:44:15.387 に答える
0

connectによって提供されるreq.queryミドルウェアを確認する必要があります。node-querystringに基づいています。

于 2012-09-20T21:11:49.037 に答える
0

これが私のやり方です(CoffeeScriptとLodashを使用):

app.use (req, res, next) ->
  # Ensure all integer parameters are parsed correctly.
  _.each req.query, (value, key) ->
    unless isNaN value
      req.query[key] = _.parseInt value
  next()

同じことは、拡張機能なしで JavaScript を使用して簡単に実現できます。

于 2015-03-12T03:27:18.083 に答える