Node.js url.parse结果返回字符串
我正在尝试做一些简单的分页。 为此,我尝试解析当前URL,然后生成指向同一查询的链接,但带有递增和递减的Node.js url.parse结果返回字符串,url,node.js,Url,Node.js,我正在尝试做一些简单的分页。 为此,我尝试解析当前URL,然后生成指向同一查询的链接,但带有递增和递减的page参数 我尝试了以下操作,但它生成了相同的链接,没有新的页面参数 var parts = url.parse(req.url, true); parts.query['page'] = 25; console.log("Link: ", url.format(parts)); 这似乎表明我需要的是格式,但我做错了什么 我知道我可以手动迭代和构建字符串,但我希望有一个现有的方法来实现这一
page
参数
我尝试了以下操作,但它生成了相同的链接,没有新的页面
参数
var parts = url.parse(req.url, true);
parts.query['page'] = 25;
console.log("Link: ", url.format(parts));
这似乎表明我需要的是格式
,但我做错了什么
我知道我可以手动迭代和构建字符串,但我希望有一个现有的方法来实现这一点。如果您查看,您可以看到url.format
的行为方式如下:
将取代搜索
查询
(对象;请参阅querystring)仅在缺少query
时使用search
query
时,search
保持不变并使用它。因此,要强制它使用查询
,只需从对象中删除搜索
:
var url = require("url");
var parts = url.parse("http://test.com?page=25&foo=bar", true);
parts.query.page++;
delete parts.search;
console.log(url.format(parts)); //http://test.com/?page=26&foo=bar
确保您一直在阅读最新版本的文档,这将为您节省很多麻烦。另一个答案很好,但您也可以这样做。
querystring
模块用于处理查询字符串
var querystring = require('querystring');
var qs = querystring.parse(parts.query);
qs.page = 25;
parts.search = '?' + querystring.stringify(qs);
var newUrl = url.format(parts);
在我看来,这是节点中的一个bug。你可以试试
// in requires
var url = require('url');
var qs = require('querystring');
// later
var parts = url.parse(req.url, true);
parts.query['page'] = 25;
parts.query = qs.stringify(parts.query);
console.log("Link: ", url.format(parts));
为了在不需要('URL')的情况下干燥代码并获取URL变量,我使用了:
这将解析url变量并将其移动到req.urlparams变量中。它在请求工作流的早期运行,因此可用于所有expressjs路径 对。我将把它重新格式化为JS,使之更标准,便于人们使用。如果发送url.parse(…,true),则query将是一个对象。你说得对。如果使用了url.parse(req.url),而没有最后一个参数,这将起作用。这不是一个bug,它有明确的文档记录:您是对的,但最新版本不稳定吗?实际上,我只检查了0.4.12的文档,但是文档已经改进了,幸运的是,在本例中,我们与旧版本一致。is仍然是querystring或更改为require('qs')
qs
,如果您想要visionmedia的,querystring
用于nodejs本机解析器。这是一个很好的答案,我认为任何使用它的人都不会使用删除操作符,因为它是非常慢的。最早的优化例子在那里,Bordyi没有要求你改变答案,我留下了一个评论。delete比设置为null或undefined慢1000%,在对象中没有任何意义(删除对象的属性意味着什么,这在OO设计中没有意义)。在我看来,将其设置为undefined更有意义,它仍然具有属性,只是不再定义它。对不起,我不是故意要表现得咄咄逼人。你是对的,如果某人正在做速度至关重要的事情,他们可能不想使用delete
。谢谢您的评论。您可以将其设置为“未定义”。注意,在这种情况下,设置为null将引发错误。还要注意的是,url模块的文档很难阅读,奇怪的是,没有示例注#3:有关“删除”与“将其分配给未定义”的信息,请参见:)
/*
Used the url module to parse and place the parameters into req.urlparams.
Follows the same pattern used for swagger API path variables that load
into the req.params scope.
*/
app.use(function(req, res, next) {
var url = require('url');
var queryURL = url.parse(req.url, true);
req.urlparams = queryURL.query;
next();
});
var myID = req.urlparams.myID;