动态选择 node.js 中的对象以删除 if/else,如果

Dynamically selecting objects in node.js to remove if/else if

我在 node.js 工作,并试图通过更改基于一个变量的一段代码来消除 if/else if。我想知道是否有办法更动态地做到这一点。我有两段相同的代码,除了一段调用 http 和一段 https,具体取决于 URL 的开始方式:

const { http, https } = require('follow-redirects');
if ((thisURL.split(":")[0] == "http")){
  const request = http.request(requestOptions, response => { 
    alist.href = response.responseUrl;
    resolve(response.responseUrl);
  });
  request.end();
}
else if ((thisURL.split(":")[0] == "https")){
 const request = https.request(requestOptions, response => { 
    alist.href = response.responseUrl;
    resolve(response.responseUrl);
  })
  request.end();
}

感觉应该有一种方法可以直接根据字符串的拆分来调用http或https而不需要if/else if,但是有没有办法做到这一点?

您可以获取 protocol 并使用 array#includes 检查协议,而不是使用 if/else。您可以根据 protocolLookup 创建 follow-redirects

const { http, https } = require('follow-redirects');
const [protocol] = thisURL.split(':');
const potocolLookup = {"https": https, "http": http};

if (["https", "http"].includes(protocol)) {
 const request = potocolLookup(protocol).request(requestOptions, response => { 
    alist.href = response.responseUrl;
    resolve(response.responseUrl);
  })
  request.end();
}