7 个回答
  1. 如果只是针对query,两者是没有差异的,query跟前面的path无关。
  2. 如果针对URL中的path部分,那两者是不一样的。

可以看下面运行结果的对比:

一、有/

> url.parse('http://example.com/resource/?abc=1')
Url {
  protocol: 'http:',
  slashes: true,
  auth: null,
  host: 'example.com',
  port: null,
  hostname: 'example.com',
  hash: null,
  search: '?abc=1',
  query: 'abc=1',
  pathname: '/resource/',
  path: '/resource/?abc=1',
  href: 'http://example.com/resource/?abc=1' }

二、没有/

> url.parse('http://example.com/resource?abc=1')
Url {
  protocol: 'http:',
  slashes: true,
  auth: null,
  host: 'example.com',
  port: null,
  hostname: 'example.com',
  hash: null,
  search: '?abc=1',
  query: 'abc=1',
  pathname: '/resource',
  path: '/resource?abc=1',
  href: 'http://example.com/resource?abc=1' }

。。。。这已经是访问不同的路由了吧。。
对于路由控制来说,/resource//resource是完全不一样的,其页面,控制逻辑一般都是不一样的。

query是一样的吧,不一样的是前面pathname,一个是/resource/,一个是/resource,是否不同就要看你的路由解析了

路由的定义和解析不同。

以php的laravel为例, /resource/ 会匹配到后一个/之后的路由。在这儿加 ?abc=1,会被认为是路由的一部分,而不是我们理解的 href 中的 search
/resource,则只是匹配到 resource?abc=1就是正常的 search

query 只是 ? 号后面的值,跟前面没关系

没有差别,首先在地址栏中输入二者,得到的结果是一致的,服务端对路径中会处理最后一个'',可以参考connect.js代码中,有相关的处理内容

推荐问题