我删除了这个问题,以抗议 Stack Overflow 与 OpenAI 合作的决定。
此举窃取了所有为 Stack Overflow 做出贡献的人的劳动成果,而且无法选择退出。 OpenAI 有着在网络上充斥不准确信息的历史,并明确表示他们永远不会为创作者的工作付费。
如果您查看 最新文档,您可以看到
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
确保您始终阅读最新版本的文档,这将为您省去很多麻烦。
在我看来,这是节点中的一个错误。你可以试试
// 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));
另一个答案很好,但你也可以这样做。
querystring
模块用于处理查询字符串。
var querystring = require('querystring');
var qs = querystring.parse(parts.query);
qs.page = 25;
parts.search = '?' + querystring.stringify(qs);
var newUrl = url.format(parts);
为了干燥代码并获取 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 路径。