2017-04-24 1 views
0

J'utilise Mongoose pour créer une API REST en utilisant NodeJs et je rencontre des problèmes avec les paramètres de req.Les paramètres de requête ne contiennent pas les bonnes valeurs

Le code J'utilise (modèle) est la suivante:

'use strict'; 
var mongoose = require('mongoose'); 
var Schema = mongoose.Schema; 

var RequestSchema = new Schema({ 
    query: { 
     type: String, 
     default: '' 
    }, 
    number: { 
     type: String, 
     default: '' 
    }, 
    subject: { 
     type: String, 
     default: '' 
    } 
}); 

module.exports = mongoose.model('Cel', RequestSchema) 

Cependant, lorsque j'utilise le code suivant de mon contrôleur (answerQuery est utilisé pour une requête POST) et imprimer les valeurs I trouver des valeurs inattendues:

exports.answerQuery = function(req, res) { 
    console.log('query is : ' + req.params.query); // this is undefined 
    console.log('query is : ' + req.body.query); // this is the value of query 
    console.log('query is: ' + req.params.number); // this is the value of number 
    console.log('subject is : ' + req.params.subject); // this is undefined 
}; 

Je comprends pourquoi req.body.query œuvres, mais je suis confus quant à pourquoi req.params.query et req.params.subject ne fonctionnent pas (retour non défini), mais req.params.number ne. Je n'ai pas beaucoup utilisé Javascript et je pense que je pourrais manquer quelque chose ici.

Modifier 0: J'utilise une requête POST pour cette

Edit 1: Ceci est mon fichier d'itinéraire:

'use strict'; 

module.exports = function(app) { 
    var celRequest = require('../controllers/celSearchController'); 

    // Routes 
    app.route('/celsearch/:number') 
     .post(celRequest.answerQuery); 
}; 
+0

Y a-t-il une URL associée à votre itinéraire answerQuery? Si oui, pouvez-vous inclure cela? – heyitsjhu

+1

Si answerQuery est votre requête POST, vos données ne seront pas demandées dans req.query. req.query ou req.params est utilisé pour la requête GET –

+0

Pouvez-vous afficher l'URL de la requête POST ainsi que les paramètres et leurs valeurs? –

Répondre

1

Votre itinéraire est le suivant:

POST /celsearch/:number 

Cela définit un paramètre, number. Les paramètres sont accessibles via req.params, ce qui explique pourquoi req.params.number fonctionne.

Vous essayez d'accéder à req.params.subject, en faisant référence à un paramètre appelé subject, qui n'existe pas. Par conséquent, ce n'est pas défini. Idem pour req.params.query. Comme il s'agit d'une route POST et qu'il est plus fréquent de transmettre des données à des routes POST à ​​l'aide du corps de la demande, ces données se terminent par req.body. Puisque le client passe un paramètre appelé "requête" dans le corps de la demande, req.body.query fonctionne.

Alors:

  • req.params est utilisé pour les paramètres d'itinéraire, les :NAME des espaces réservés dans la déclaration de la route;
  • req.body est utilisé pour les paramètres passés dans le corps de la requête, communément utilisé pour les requêtes POST;
  • req.query est utilisé pour les paramètres passés dans l'URL en tant que chaîne de requête: /foo/bar?query=somevalue. Ceci est généralement utilisé pour les requêtes GET.