要进行路径的解析和判断,需要用到这两个模块,url和path;
url
url.parse()
基本用法是将一个字符串解析为一个对象,其第一个参数传入一个字符串:
var url = require('url');
var urlStr = 'http://user:pass@host.com:8080/path/to/file?query=string#hash';
console.log(url.parse(urlStr));
//输出
// Url {
// protocol: 'http:',
// slashes: true,
// auth: 'user:pass',
// host: 'host.com:8080',
// port: '8080',
// hostname: 'host.com',
// hash: '#hash',
// search: '?query=string',
// query: 'query=string',
// pathname: '/path/to/file',
// path: '/path/to/file?query=string',
// href: 'http://user:pass@host.com:8080/path/to/file?query=string#hash' }
可以通过属性名的方式获取所需要的值:
console.log(url.parse(urlStr).pathname);///path/to/file
url.resolve(from, to)
url.resolve() 方法会以一种 Web 浏览器解析超链接的方式把一个目标 URL 解析成相对于一个基础 URL。
url.resolve('/one/two/three', 'four'); // '/one/two/four'
url.resolve('http://example.com/', '/one'); // 'http://example.com/one'
url.resolve('http://example.com/one', '/two'); // 'http://example.com/two'
path
首先看这篇,不同环境下的相对路径与绝对路径,正斜杠与反斜杠的区别;
http://blog.csdn.net/u014801403/article/details/53384705
在Node中,path模块同样根据操作系统的不同而不同;
path 模块的默认操作会根据 Node.js 应用程序运行的操作系统的不同而变化。 比如,当运行在 Windows 操作系统上时,path 模块会认为使用的是 Windows 风格的路径。
例如,对 Windows 文件路径 C:\temp\myfile.html 使用 path.basename() 函数,运行在 POSIX 上与运行在 Windows 上会产生不同的结果:
在 POSIX 上:
path.basename('C:\\temp\\myfile.html');
// 返回: 'C:\\temp\\myfile.html'
在 Windows 上:
path.basename('C:\\temp\\myfile.html');
// 返回: 'myfile.html'
path.join()
path.join() 方法使用平台特定的分隔符把全部给定的 path 片段连接到一起,并规范化生成的路径。
长度为零的 path 片段会被忽略。 如果连接后的路径字符串是一个长度为零的字符串,则返回 '.',表示当前工作目录。
如果任一路径片段不是一个字符串,则抛出 TypeError。
console.log(path.join('/foo','bar','baz/asdf','..'));// \foo\bar\baz
// console.log(path.join('/foo',{},'bar'));// 抛出 'TypeError: Path must be a string. Received {}'
path.resolve()
path.resolve() 方法会把一个路径或路径片段的序列解析为一个绝对路径。
给定的路径的序列是从右往左被处理的,后面每个 path 被依次解析,直到构造完成一个绝对路径。 例如,给定的路径片段的序列为:/foo、/bar、baz,则调用 path.resolve('/foo', '/bar', 'baz') 会返回 /bar/baz。
如果处理完全部给定的 path 片段后还未生成一个绝对路径,则当前工作目录会被用上。
生成的路径是规范化后的,且末尾的斜杠会被删除,除非路径被解析为根目录。
长度为零的 path 片段会被忽略。
如果没有传入 path 片段,则 path.resolve() 会返回当前工作目录的绝对路径。
windows环境下
console.log(path.resolve('/foo/bar','./baz'));// C:\foo\bar\baz
console.log(path.resolve('/foo/bar','/tmp/file/'));// C:\tmp\file
console.log(path.resolve('wwwroot','static_files/png/','../gif/image.gif'));//C:\Users\Matthew\Desktop\nodejs\url\wwwroot\static_files\gif\image.gif
linux环境下
path.resolve('/foo/bar', './baz');
// 返回: '/foo/bar/baz'
path.resolve('/foo/bar', '/tmp/file/');
// 返回: '/tmp/file'
path.resolve('wwwroot', 'static_files/png/', '../gif/image.gif');
// 如果当前工作目录为 /home/myself/node,
// 则返回 '/home/myself/node/wwwroot/static_files/gif/image.gif'