Estoy usando Mongoose para construir una API REST usando NodeJs y tengo problemas con los parámetros de req.
El código que estoy usando (modelo) es el siguiente:
'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)Sin embargo, cuando uso el siguiente código de mi controlador (answerQuery se usa para una solicitud POST) e imprimo los valores, encuentro valores inesperados:
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 }; Entiendo por qué funciona req.body.query , pero estoy confundido en cuanto a por qué no funcionan req.params.query y req.params.subject (return undefined) pero sí lo hace req.params.number . No he usado mucho Javascript y creo que podría estar perdiéndome algo aquí.
Edición 0: estoy usando una solicitud POST para esto
Edición 1: Este es mi archivo de ruta:
'use strict'; module.exports = function(app) { var celRequest = require('../controllers/celSearchController'); // Routes app.route('/celsearch/:number') .post(celRequest.answerQuery); };Tu ruta es esta:
POST /celsearch/:number Esto define un parámetro, number . Se accede a los parámetros a través de req.params , por lo que funciona req.params.number .
Está intentando acceder a req.params.subject , refiriéndose a un parámetro llamado subject , que no existe. Por lo tanto, es indefinido. Lo mismo ocurre con req.params.query .
Debido a que es una ruta POST, y es más común pasar datos a rutas POST usando el cuerpo de la solicitud, esos datos terminan en req.body . Dado que el cliente pasa un parámetro llamado "consulta" en el cuerpo de la solicitud, req.body.query funciona.
Asi que:
req.params se usa para parámetros de ruta, los marcadores de posición :NAME en la declaración de ruta;req.body se usa para los parámetros pasados en el cuerpo de la solicitud, comúnmente usado para solicitudes POST ;req.query se usa para los parámetros pasados en la URL como una cadena de consulta: /foo/bar?query=somevalue . Esto se usa generalmente para solicitudes GET .