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

时间:2018-11-08 20:44:39

标签: 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=bag`;
    next();
}

然后在请求处理程序中:

router.get('/', addQuery, (req, res) => {
    console.log(req.query.id);
    console.log(req.query.product);
});

但是它给了我undefined。我不能使用任何客户端js,也不能使用服务器端编码。不是我的origin向我发送此请求。

那么如何添加查询字符串来表达请求然后成功解析呢?

1 个答案:

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

这应该几乎一样,但是更干净。