我想在Express中将字符串添加到req.url
中。字符串如下所示:
?id=someID&product=bag
我无权访问客户端html或服务器。我从客户端得到的只是一个GET
请求,没有任何参数。因此,我尝试制作可以添加查询字符串的中间件,然后像往常一样解析它。这个想法是:
// Middleware
const addQuery = (req, res, next) => {
req.url = req.url + `?id=someID&product=bag`;
next();
}
然后在请求处理程序中:
router.get('/', addQuery, (req, res) => {
console.log(req.query.id);
console.log(req.query.product);
});
但是它给了我undefined
。我不能使用任何客户端js
,也不能使用服务器端编码。不是我的origin
向我发送此请求。
那么如何添加查询字符串来表达请求然后成功解析呢?
答案 0 :(得分:3)
express
似乎正在导出名为query
的中间件,该中间件用于解析查询字符串。由于通常在请求流的早期调用此中间件,因此向req.url
添加查询字符串“太晚了”。
以下是一种可行的解决方法:
const addQuery = (req, res, next) => {
req.url = req.url + `?id=someID&product=bag`;
req.query = null; // if this isn't added, the `query` middleware
// will assume the query string is already parsed
next();
}
app.get('/', addQuery, express.query(), (req, res) => {
...
});
编辑:正如@wlh正确建议的那样,addQuery
也可以直接修改req.query
:
const addQuery = (req, res, next) => {
req.query.id = 'someID';
req.query.product = 'bag';
next();
}
这应该几乎一样,但是更干净。