2016-04-07 14 views
1

Moğolla mongoose ile bağlanan bir hapi sunucusuna ve basit bir modele, örn. Kullanıcı. Kullanıcıların filtrelenmesini etkinleştirmek istiyorum, ör.URL sorgu param'lerini hapi'den Mongoose'a en iyi şekilde aktarma

User.find(req.query, function() {...}); 
req.query URL'den çözümlenen

ve olmak gibi bir şey:

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

bulunan herkes hazır bir şey varsa, kullanmak için sorgu ayrıştırıcı kütüphane ve URL param sözdizimi hangi kombinasyonu önerebilir herşey?

Elbette

, ben genel bir çözüm istiyorum ve:

DÜZENLEME o biraz yaygın bir sorun olmalı, ama ben mevcut çözümler bulmak mümkün oldum gibi bu görünüyor

... Her model için sabit bir param seti el ile ayrıştırmaktan kaçının.

cevap

-1

Sadece böyle bir şey yapabileceğini: Bu aşağıdaki biçimde son noktalarını ayrıştırmak olacak

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})... 

} 

: gereken kod

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

Çok az miktarda, biraz params biçimlendirmek gerekebilir Mongoose sorgu yönergelerini karşılamak için, ancak bir çerçeve gerçekten gerekli değildir.

1

Sorgu parametrelerini doğrulamak için Joi kullanabilirsiniz. Hapi ile çok kolay entegre olur. Ve herhangi bir özel querystring ayrıştırma eklemek için gerek yoktur. Parametreler request.query nesnesinde kullanılabilir. path parameters ürününe request.params nesnesinden erişebilirsiniz.

Joi'yi kullandığınızda, parametre denetimlerinden herhangi biri başarısız olursa, rota işleyici işlevi çağrılmadan önce bir hata yanıtı verilir. Basit bir örnek:

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); 
     }); 

    } 
}; 

Ayrıca Validation sayfayı inceleyin. Her şeyin nasıl çalıştığına dair oldukça iyi bir döküntü.

İlgili konular