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

问题描述 投票:0回答:4

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

page
参数。

我尝试执行以下操作,但它会生成相同的链接,但没有新的

page
参数。

var parts = url.parse(req.url, true);
parts.query['page'] = 25;
console.log("Link: ", url.format(parts));

URL 模块的文档似乎表明

format
是我所需要的,但我做错了。

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

url node.js
4个回答
53
投票

如果您查看 最新文档,您可以看到

url.format
的行为方式如下:

  • search
    将用来代替
    query
  • query
    (对象;参见查询字符串)仅在
    search
    不存在时才会使用。

当您修改

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

确保您始终阅读最新版本的文档,这将为您省去很多麻烦。


3
投票

在我看来,这是节点中的一个错误。你可以试试

// 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));

2
投票

另一个答案很好,但你也可以这样做。

querystring
模块用于处理查询字符串。

var querystring = require('querystring');
var qs = querystring.parse(parts.query);
qs.page = 25;
parts.search = '?' + querystring.stringify(qs);
var newUrl = url.format(parts);

0
投票

为了干燥代码并获取 URL 变量而不需要 require('url') 我使用了:

/* 
   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;

这将解析 url 变量并将其移动到 req.urlparams 变量中。它在请求工作流程的早期运行,因此可用于所有expressjs 路径。

© www.soinside.com 2019 - 2024. All rights reserved.