请求参数不包含正确的值
Request params do not contain proper values
我正在使用 Mongoose 构建一个 REST API 使用 NodeJs 并且 运行 遇到了 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)
但是,当我使用我的控制器中的以下代码(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.query
和 req.params.subject
无效的原因感到困惑(return 未定义)但 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
个请求。
我正在使用 Mongoose 构建一个 REST API 使用 NodeJs 并且 运行 遇到了 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)
但是,当我使用我的控制器中的以下代码(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.query
和 req.params.subject
无效的原因感到困惑(return 未定义)但 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
个请求。