我知道如何获取查询的参数,像这样:
app.get('/sample/:id', routes.sample);
在这种情况下,我可以使用req.params.id来获取参数(例如/sample/2中的2)。
然而,对于/sample/2这样的url ?color=红色,我怎么能访问变量颜色?
我试过req.params.color,但不起作用。
我知道如何获取查询的参数,像这样:
app.get('/sample/:id', routes.sample);
在这种情况下,我可以使用req.params.id来获取参数(例如/sample/2中的2)。
然而,对于/sample/2这样的url ?color=红色,我怎么能访问变量颜色?
我试过req.params.color,但不起作用。
当前回答
使用要求。查询,用于获取路由中查询字符串参数中的值。 参考req.query。 如果在路由http://localhost:3000/?name=satyam中,你想获取name参数的值,那么你的“get”路由处理程序将像这样:-
app.get('/', function(req, res){
console.log(req.query.name);
res.send('Response send to client::'+req.query.name);
});
其他回答
我已经开始在express上的一些应用程序中使用的一个很好的技术是创建一个对象,它合并了express的request对象的查询、params和body字段。
//./express-data.js
const _ = require("lodash");
class ExpressData {
/*
* @param {Object} req - express request object
*/
constructor (req) {
//Merge all data passed by the client in the request
this.props = _.merge(req.body, req.params, req.query);
}
}
module.exports = ExpressData;
然后在你的控制器体中,或者在快速请求链的范围内的任何地方,你可以像下面这样使用:
//./some-controller.js
const ExpressData = require("./express-data.js");
const router = require("express").Router();
router.get("/:some_id", (req, res) => {
let props = new ExpressData(req).props;
//Given the request "/592363122?foo=bar&hello=world"
//the below would log out
// {
// some_id: 592363122,
// foo: 'bar',
// hello: 'world'
// }
console.log(props);
return res.json(props);
});
这使得“深入”用户可能发出的请求的所有“自定义数据”变得很好和方便。
Note
为什么是“道具”领域?因为这是一个精简的代码片段,我在我的许多api中使用了这种技术,我还将身份验证/授权数据存储在这个对象上,示例如下。
/*
* @param {Object} req - Request response object
*/
class ExpressData {
/*
* @param {Object} req - express request object
*/
constructor (req) {
//Merge all data passed by the client in the request
this.props = _.merge(req.body, req.params, req.query);
//Store reference to the user
this.user = req.user || null;
//API connected devices (Mobile app..) will send x-client header with requests, web context is implied.
//This is used to determine how the user is connecting to the API
this.client = (req.headers) ? (req.headers["x-client"] || (req.client || "web")) : "web";
}
}
快捷手册上说你应该用req。query来访问QueryString。
// Requesting /display/post?size=small
app.get('/display/post', function(req, res, next) {
var isSmall = req.query.size === 'small'; // > true
// ...
});
查询字符串和参数不一致。
你需要在单个路由url中使用两者
请检查下面的例子可能对你有用。
app.get('/sample/:id', function(req, res) {
var id = req.params.id; //or use req.param('id')
................
});
让链接通过你的第二个段是你的id示例:http://localhost:port/sample/123
如果你遇到问题,请使用'?的运营商
app.get('/sample', function(req, res) {
var id = req.query.id;
................
});
获取链接就像这个例子:http://localhost:port/sample?id=123
两者都在一个例子中
app.get('/sample/:id', function(req, res) {
var id = req.params.id; //or use req.param('id')
var id2 = req.query.id;
................
});
获取链接示例:http://localhost:port/sample/123?id=123
使用要求。查询,用于获取路由中查询字符串参数中的值。 参考req.query。 如果在路由http://localhost:3000/?name=satyam中,你想获取name参数的值,那么你的“get”路由处理程序将像这样:-
app.get('/', function(req, res){
console.log(req.query.name);
res.send('Response send to client::'+req.query.name);
});
@Zugwait的答案是正确的。Req.param()已弃用。你应该使用req。参数要求。查询或req.body。
但我想说得更清楚一点:
要求的事情。参数将只由路由值填充。也就是说,如果你有一个像/users/:id这样的路由,你可以在req.params.id或req.params['id']中访问这个id。
要求的事情。查询和请求。Body将填充所有参数,不管它们是否在路由中。当然,查询字符串中的参数将在req中可用。post body中的查询和参数将在req.body中可用。
所以,回答你的问题,因为颜色不在路由,你应该能够得到它使用req.query.color或req.query['color']。