【问题标题】:Request params do not contain proper values请求参数不包含正确的值
【发布时间】:2017-09-20 15:15:46
【问题描述】:

我正在使用 Mongoose 使用 NodeJs 构建 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);
};   

【问题讨论】:

  • 是否有与您的 answerQuery 路由相关联的 url?如果是的话,你能把它包括进去吗?
  • 如果 answerQuery 是您的 POST 请求,那么您将在 req.body 中获取数据,而不是在 req.query 中。 req.query 或 req.params 用于 GET 请求
  • 你能显示 POST 请求的 url 以及参数及其值吗?
  • @UditKumawat 这很有意义,因为我使用的是 POST 请求。我将编辑问题以反映这一点。您能否继续回答,以便我将其标记为正确答案。还有为什么 req.params.number 会起作用,而其他的却不会呢?谢谢!
  • 您应该发布调用answerQuery 的路由处理程序,它可能会解释为什么会发生这种情况。

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


【解决方案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 请求。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-04
    • 1970-01-01
    • 2013-09-17
    • 1970-01-01
    • 2016-04-24
    • 1970-01-01
    • 2021-11-22
    • 2020-02-25
    相关资源
    最近更新 更多