使用节点 URL 模块,如何一次设置所有搜索参数



我看到你可以做到:

myUrl.searchParams.set('param1', 'value');
myUrl.searchParams.set('param2', 'value');
...

我想做的更像是:

myUrl.searchParams.set({
    param1: 'value',
    param2: 'value
});

但这行不通。

我在文档中看到您可以使用URLSearchParams类来执行此操作:

myParams = new URLSearchParams({
    param1: 'value',
    param2: 'value
});

但是我无法弄清楚如何使用它。这些不起作用:

myUrl.searchParams = myParams;

myUrl.searchParams.set(myParams);

我尝试过的其他一些事情也没有。除非我只是发疯,否则我无法在文档中找到它显示如何执行此操作的位置。

您的想法是正确的,这不是错字,但是您需要将 params 对象分配给search而不是searchParams

myUrl.search = myParams

myURL.searchParams对象是由 new URL() 自动创建的 URLSearchParams 的实例。您可以使用它的方法,但是...可悲的是,一旦创建了该对象,一次设置多个参数为时已晚,因为只有构造函数支持该参数,而它的所有方法都不支持。

认为您应该能够自己创建一个新实例并将其分配给 searchParams 属性是合乎逻辑的。但他们决定将该属性设为只读。我认为这会让很多人感到困惑,这是不必要的不直观。

好消息是,myParams.search是可写的,它将愉快地序列化myParams对象。

const myUrl = new URL('https://example.com/');
myUrl.search = new URLSearchParams({
    param1 : 'value',
    param2 : 'value'
});
myUrl.toString();
// https://example.com/?param1=value&param2=value

我希望有人支持将对象传递给myParams#set()的能力,并且有一天我们可以在URL上只有一个search相关的属性。