Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js url.parse结果返回字符串_Url_Node.js - Fatal编程技术网

Node.js url.parse结果返回字符串

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)); 这似乎表明我需要的是格式,但我做错了什么 我知道我可以手动迭代和构建字符串,但我希望有一个现有的方法来实现这一

我正在尝试做一些简单的分页。 为此,我尝试解析当前URL,然后生成指向同一查询的链接,但带有递增和递减的
page
参数

我尝试了以下操作,但它生成了相同的链接,没有新的
页面
参数

var parts = url.parse(req.url, true);
parts.query['page'] = 25;
console.log("Link: ", url.format(parts));
这似乎表明我需要的是
格式
,但我做错了什么

我知道我可以手动迭代和构建字符串,但我希望有一个现有的方法来实现这一点。

如果您查看,您可以看到
url.format
的行为方式如下:

  • 搜索
    将取代
    查询
  • query
    (对象;请参阅querystring)仅在缺少
    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;