gpt4 book ai didi

javascript - 请求参数不包含正确的值

转载 作者:行者123 更新时间:2023-12-03 04:28:54 25 4
gpt4 key购买 nike

我正在使用 Mongoose 使用 NodeJs 构建 REST API,但遇到了 req.params 的问题。

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

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

但是,当我在 Controller 中使用以下代码(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);
};

最佳答案

您的路线是这样的:

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 请求。

关于javascript - 请求参数不包含正确的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43579635/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com