如何在nodejs url parse中包含端口

时间:2014-03-27 22:13:24

标签: javascript node.js http url

嗯......我有一个非常简单的用例。

我有两个字符串:

var a = 'localhost:3000',
    b = '/whatever/; // this can also be whatever/ or /whatever

我需要解析

url.parse(a, b); // so that it takes care of dealing with slashes

但是我得到了

localhost:/whatever/ instead of localhost:3000/whatever/

任何指针?

谢谢!

2 个答案:

答案 0 :(得分:2)

如果比较以下两个调用,您会发现在字符串前面添加协议会产生很大的不同:

> url.parse('http://localhost:3000', '/whatever/')
{ protocol: 'http:',
  slashes: true,
  auth: null,
  host: 'localhost:3000',
  port: '3000',
  hostname: 'localhost',
  hash: null,
  search: '',
  query: {},
  pathname: '/',
  path: '/',
  href: 'http://localhost:3000/' }
>

没有

> url.parse('localhost:3000', '/whatever/')
{ protocol: 'localhost:',
  slashes: null,
  auth: null,
  host: '3000',
  port: null,
  hostname: '3000',
  hash: null,
  search: '',
  query: {},
  pathname: null,
  path: null,
  href: 'localhost:3000' }
>

您可能正在寻找的内容会添加协议,然后使用+代替,

> url.parse('http://localhost:3000' + '/whatever/')
{ protocol: 'http:',
  slashes: true,
  auth: null,
  host: 'localhost:3000',
  port: '3000',
  hostname: 'localhost',
  hash: null,
  search: null,
  query: null,
  pathname: '/whatever/',
  path: '/whatever/',
  href: 'http://localhost:3000/whatever/' }
>

答案 1 :(得分:0)

选项可以使用以下内容执行normalize path

path.normalize('/foo/bar//baz/asdf');  // the path  here

// returns  '/foo/bar/baz/asdf'

然后:

var cleanUrl = 'localhost:3000' + path.normalize(yourpath);