Nas*_*tro 4 javascript node.js express
我想req.url在 Express 中向 a 添加一个字符串。字符串如下所示:
?id=someID&product=bag
Run Code Online (Sandbox Code Playgroud)
我无权访问客户端 html 或服务器。我从客户那里得到的只是一个GET没有任何参数的请求。所以我尝试制作中间件,它会添加查询字符串,然后我会像往常一样解析它。这个想法是:
// Middleware
const addQuery = (req, res, next) => {
req.url = req.url + `?id=someID&product=bag`;
next();
}
Run Code Online (Sandbox Code Playgroud)
然后在请求处理程序中:
router.get('/', addQuery, (req, res) => {
console.log(req.query.id);
console.log(req.query.product);
});
Run Code Online (Sandbox Code Playgroud)
但它给了我undefined。我不能使用任何客户端js,也不能使用服务器端编码。不是我origin向我发送这个请求。
那么如何添加查询字符串来表达请求然后成功解析呢?
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) => {
...
});
Run Code Online (Sandbox Code Playgroud)
编辑:正如@wlh 正确建议的那样,addQuery也可以req.query直接修改:
const addQuery = (req, res, next) => {
req.query.id = 'someID';
req.query.product = 'bag';
next();
}
Run Code Online (Sandbox Code Playgroud)
这应该几乎相同,但更干净。
| 归档时间: |
|
| 查看次数: |
4678 次 |
| 最近记录: |