2016-04-07 9 views
1

私はmongoose経由でmongodbに接続するhapiサーバと単純なモデルを持っています。ユーザー。URLクエリのパラメータをhapiからMongooseに最も適切に渡す方法

ユーザーのフィルタリングを有効にしたいとします。

req.queryはURLから解析、およびようなものになることでしょう
User.find(req.query, function() {...}); 

:で、容易に入手可能なものがある場合は、誰もが、使用するクエリパーサライブラリーとURLのparam構文のどの組み合わせを提案することができます

{count: {$gt: 10, $lt: 100}} 

すべて?

これは、それが多少共通の問題でなければなりませんが、私は...

EDIT既存のソリューションを見つけることができませんしてきたように思える:もちろん

、私は一般的なソリューションが欲しい、とすべてのモデルの固定されたパラメータセットを手動で解析するのは避けてください。

答えて

-1

あなたはちょうどこのような何かを行うことができ:これは次の形式でエンドポイントを解析する

var url = require('url'); 

function(req,res){ 

    //parse query params using node url module 
    //url is a core node module, no npm install needed 
    var params = url.parse(req.url, true).query; 

    //query database using params 
    User.find({userId:params.userId})... 

} 

:必要なコードの

http://someApi.com?userId=MyId&param2=OtherParam...etc 

非常に最小限の量、あなたは少しのparamsをフォーマットする必要がありますmongooseクエリのガイドラインを満たすことができますが、フレームワークは実際には必要ありません。

1

Joiを使用すると、クエリパラメータを検証できます。それはHapiと非常に簡単に統合されます。特別なクエリ文字解析を追加する必要はありません。パラメータはrequest.queryオブジェクトで使用できます。 request.paramsオブジェクトからpath parametersにアクセスできます。

Joiを使用しているときに、いずれかのパラメータチェックが失敗すると、ルートハンドラ関数が呼び出される前にエラー応答が返されます。簡単な例:

var User = require('./UserModel'); 
var joi = require('joi'); 

var getUsersRoute = { 
    method: 'GET', 
    path: '/users/{user_id?}', 
    config: { 
     validate: { 
      params: { 
       user_id: joi.number().optional().default(null) 
      }, 
      query: { 
       count: joi.number().min(10) 
      } 
     } 
    }, 
    handler: function(request, reply) { 
     if(request.params.user_id){ 
      /* do something with the id if you want to */ 
     } 

     User.find(request.query, function(results) { 
      reply(results); 
     }); 

    } 
}; 

Validationのページもチェックしてください。それがどのように機能するかはかなり良い内訳です。

関連する問題