使用 Node URL 模块,您如何一次设置所有搜索参数?

Ken*_*ore 2 javascript url node.js

我看到你可以这样做:

myUrl.searchParams.set('param1', 'value');
myUrl.searchParams.set('param2', 'value');
...
Run Code Online (Sandbox Code Playgroud)

我想做的更像是:

myUrl.searchParams.set({
    param1: 'value',
    param2: 'value
});
Run Code Online (Sandbox Code Playgroud)

但这不起作用。

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

myParams = new URLSearchParams({
    param1: 'value',
    param2: 'value
});
Run Code Online (Sandbox Code Playgroud)

但我想不通的是如何使用它。这些不起作用:

myUrl.searchParams = myParams;
Run Code Online (Sandbox Code Playgroud)

或者

myUrl.searchParams.set(myParams);
Run Code Online (Sandbox Code Playgroud)

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

Set*_*day 5

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

myUrl.search = myParams
Run Code Online (Sandbox Code Playgroud)

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

认为您应该能够自己创建一个新实例并将其分配给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
Run Code Online (Sandbox Code Playgroud)

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