分类: Express

探究Express Request中的url

url在解析过程是会被逐级删减。如:

采用第一种写法,浏览器会得到404 Not Found。第二种则正常。原因即在于,url在解析过程是会被逐级删减。

通过node-inspector调试上面的例子,可得到运行中req.url,req.originalUrl,req.baseUrl的值。

解释如下:
req.url = req.originalUrl – req.baseUrl。也是router.get传入的匹配路径的匹配对象。这也就可以解释上面的例子的运行结果了。all,post,put等等函数同理。

req.originalUrl与req.url类似。不同的是,它用于备份最初的请求url,从而你可以随意重写req.url来到处跳转,而不用担心丢失初始的url。比如,用于挂载中间函数的app.use()就会重写req.url来压缩挂载点的长度。

req.baseUrl存储当前router挂载的路径。即app.use('/path', router);。此时/path就是baseUrl。即便在挂载的时候使用的是正则等匹配表达式,baseUrl存储的也会是匹配的字符串,而不是正则表达式。