不推荐使用节点旧版url.parse,而是使用什么?

时间:2019-12-17 13:12:13

标签: javascript node.js url

require('url').parse('someurl.com/page')已被仅文档弃用,而我们严格的linter对此感到不满意...我试图用互联网建议的new URL('someurl.com/page')替换掉它,在大多数情况下都可以使用

但是,我们有一些示例,其中url是本地图像some/image-png,并且可以与url.parse()很好地配合并返回:

Url {
  protocol: null,
  slashes: null,
  auth: null,
  host: null,
  port: null,
  hostname: null,
  hash: null,
  search: null,
  query: null,
  pathname: '/some/image.png',
  path: '/some/image.png',
  href: '/some/image.png'
}

但是建议的替换new URL('some/image-png')会引发类型错误...

  

TypeError [ERR_INVALID_URL] [ERR_INVALID_URL]:无效的网址:   /some/image.png

url.parse正在做一些验证并接受本地路径,但是新的url构造函数却没有。该怎么办?

3 个答案:

答案 0 :(得分:12)

const server = http.createServer((req, res) => {
   const baseURL = 'http://' + req.headers.host + '/';
   const reqUrl = new URL(req.url,baseURL);
   console.log(reqUrl);
});

会给 reqUrl :

URL {
  href: 'http://127.0.0.1:3000/favicon.ico',
  origin: 'http://127.0.0.1:3000',
  protocol: 'http:',
  username: '',
  password: '',
  host: '127.0.0.1:3000',
  hostname: '127.0.0.1',
  port: '3000',
  pathname: '/favicon.ico',
  search: '',
  searchParams: URLSearchParams {},
  hash: ''
}

答案 1 :(得分:4)

const path = require("path");
const url = require("url");

const p = path.join("public", "images", "a.jpg");

console.log(p);                                     // public\images\a.jpg
console.log(new url.URL(p, "http://xxx").pathname); // /public/images/a.jpg

答案 2 :(得分:3)

您可以使用URL构造函数的基本参数。例如:

new URL('some/image-png', "https://dummyurl.com")

有关更多信息,请https://nodejs.org/api/url.html#url_constructor_new_url_input_base