Expressjs: recherche requête api

Je souhaite rechercher dans mon dépôt utilisateur une chaîne de requête.

Cela devrait renvoyer tous les utilisateurs avec un nom d'utilisateur similaire "kyogron" et un courrier électronique similaire "kyogron @ gmail"

GET localhost:3000/users?username=kyogron&[email protected] 

Cela devrait renvoyer tous les utilisateurs:

 GET localhost:3000/users 

J'ai déjà réussi à gérer les paramètres de routage, mais je suis coincé pour l'optimiser:

 app.get('/users', function(req, res) { // creates a mongoosejs query object var query = User.find({}); // to understand how expressjs handles queries: // ?username=kyogron&[email protected] // { username: "kyogron", email: "[email protected]" } //console.log(req.query); // this was one idea of optimizing the search query parameters // this doesn't work don't know why I always get an array of ALL users // even the key and value is right Object.keys(req.query).forEach(function(key) { query.select(key, req.query[key]); }); // this was the way I was first handling the parameters, this works !! //if (req.query.username) query.where('username', req.query.username); //if (req.query.email) query.where('email', req.query.email); // the rest of the query query.select('username', 'email'); query.exec(function(err, users) { if (err) throw err; res.json(users); }); }); 

Voici les problèmes avec lesquels je meurs:

  1. Pourquoi l'itinéraire de l'objet req.query fonctionne-t-il?
  2. Comment dire mannequin pour utiliser un caractère générique (p. Ex. Kyo *)

Serais bien si quelqu'un pourrait m'aider 🙂

Cordialement

EDIT :

La deuxième question serait résolue avec $ où:

  if (req.query.username) { query.$where(function() { return this.username === req.query.username; // here we need a regex check }); } 

Cela ne fonctionne pas … Quelqu'un pourrait-il me donner un indice?

EDIT2:

Je n'ai rien réussi avec $ où … mais j'ai maintenant trouvé

 query.where('username').regex(); 

Je dois juste chercher une regex de recherche qui recherche des mots similaires

EDIT3:

J'ai trouvé ce fil: Comment interroger MongoDB avec "like"? Je demande au groupe de mangous comment je pourrais le faire avec la mangouste

EDIT4:

 if (req.query.username) { query.where('username').regex(new RegExp("\/"+req.query.username+"\/")); } 

Je l'ai presque compris. Il suffit de réparer cette stupide regex …

 app.get('/users', function(req, res) { var query = User.find({}); Object.keys(req.query).forEach(function(key) { query.where(key).regex(new RegExp(req.query[key])); }); /* if (req.query.username) { query.where('username').regex(new RegExp(req.query.username)); } if (req.query.email) { query.where('email').regex(new RegExp(req.query.email)); }*/ query.select('username', 'email'); query.exec(function(err, users) { if (err) throw err; res.json(users); }); }); 

Le premier n'a pas fonctionné parce que j'avais une faute de frappe (.select () not .where ()). La seconde a été trouvée dans un fil supplémentaire

Je suis encore un peu incertain quant à l'approche choisie.

Iterating req.query permettrait de rendre le code réutilisable (peut-être comme fonction de paramètre de routage de précondition) mais il est tout à fait susceptible d'erreurs