Javascript 如何在Express中将查询字符串添加到req.url?

Javascript 如何在Express中将查询字符串添加到req.url?,javascript,node.js,express,Javascript,Node.js,Express,我想在Express中向req.url添加一个字符串。字符串如下所示: ?id=someID&product=bag 我没有访问客户端html或服务器的权限。我从客户端得到的只是一个没有任何参数的get请求。所以我试着制作中间件,添加查询字符串,然后像往常一样解析它。这个想法是: // Middleware const addQuery = (req, res, next) => { req.url = req.url + `?id=someID&product

我想在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);
});
但是它给了我
未定义的
。我不能使用任何客户端
js
,也不能使用服务器端编码。不是我的
origin
向我发送此请求


那么,如何将查询字符串添加到express请求中,然后成功解析它呢?

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();
}

这应该工作得差不多,但要干净得多。

出于好奇,他能不能也在他的中间件中更新req.query对象
req.query={id:'someID',product:'bag“}
@wlh duh,当然这也是可能的,而且更简单!我如何对post?server.post(“/sample redirect”,(req,res)=>{res.header(“访问控制允许源代码”,“*”);res.header(“访问控制允许头文件”,”Origin,X-Requested-With,Content-Type,application/json”);res.header(“访问控制允许方法”,“PUT,POST,GET,DELETE,OPTIONS”);console.log(“请求数据:”,req.body);return app.render(req,res,/sample redirect)”,{sample_Data:req.body});我想将发布的数据附加到URL,如/sample redirect?JSON.stringify(sample_data)