请求参数不包含正确的值

时间:2017-04-24 04:06:57

标签: javascript node.js express mongoose mongoose-schema

我使用Mongoose使用NodeJ构建REST API,并且遇到了req参数的问题。

我使用(模型)的代码如下:

'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)

但是,当我使用我的控制器中的以下代码(answerQuery用于POST请求)并打印出值时,我发现了意外的值:

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

我理解为什么req.body.query有效,但我很困惑为什么req.params.queryreq.params.subject不能工作(返回未定义),但req.params.number会这样做。我没有经常使用Javascript,并认为我可能会遗漏一些东西。

编辑0:我正在使用此

的POST请求

编辑1:这是我的路线文件:

'use strict';

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

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

1 个答案:

答案 0 :(得分:1)

您的路线是:

POST /celsearch/:number

这定义了一个参数number。通过req.params访问参数,这就是req.params.number有效的原因。

您正在尝试访问req.params.subject,引用一个名为subject的参数,该参数不存在。因此,它是未定义的。同样适用于req.params.query

因为它是POST路由,并且使用请求正文将数据传递到POST路由是最常见的,所以该数据最终会在req.body中。由于客户端在请求正文中传递了名为“query”的参数,因此req.body.query可以正常工作。

所以:

  • req.params用于路由参数,路由声明中的:NAME占位符;
  • req.body用于请求正文中传递的参数,通常用于POST个请求;
  • req.query用于在URL中传递的参数作为查询字符串:/foo/bar?query=somevalue。这通常用于GET请求。