Node.js의 경로 처리 모듈 경로 소개
이 글은 Node.js의 경로 처리 모듈 경로를 주로 소개합니다. 이제 여러분과 공유합니다. 도움이 필요한 친구들이 참고할 수 있습니다.
nodejs에서는 경로가 사용법이라는 것은 모두가 알고 있을 것입니다. 매우 자주 사용되는 모듈이지만 사람들이 좋아하거나 싫어하는 모듈입니다. 일부 문서는 명확하지 않고 일부는 인터페이스의 플랫폼 차이로 인해 발생하기 때문입니다. 이번 글에서는 Node.js의 경로 처리 모듈 경로에 대해 자세히 소개하겠습니다. 모듈 경로를 학습하거나 사용하는 데 도움이 되기를 바랍니다.
머리말
이 모듈에서는 경로를 처리하고 변환하는 데 사용할 수 있는 많은 메서드와 속성이 제공됩니다. 경로 인터페이스를 경로에 따라 분류하면 됩니다. 신중하게 사용하고 생각하면 그렇게 혼란스럽지 않을 것입니다. 아래에서는 Node.js의 경로 처리 모듈 경로를 자세히 소개하겠습니다.
경로/파일 이름/확장명 가져오기
경로 가져오기: path.dirname(filepath)<code>path.dirname(filepath)<br>
获取文件名:path.basename(filepath)<br>
获取扩展名:path.extname(filepath)<br>
获取所在路径
例子如下:
var path = require('path'); var filepath = '/tmp/demo/js/test.js'; // 输出:/tmp/demo/js console.log( path.dirname(filepath) );
获取文件名
严格意义上来说,path.basename(filepath)
只是输出路径的最后一部分,并不会判断是否文件名。
但大部分时候,我们可以用它来作为简易的“获取文件名“的方法。
var path = require('path'); // 输出:test.js console.log( path.basename('/tmp/demo/js/test.js') ); // 输出:test console.log( path.basename('/tmp/demo/js/test/') ); // 输出:test console.log( path.basename('/tmp/demo/js/test') );
如果只想获取文件名,单不包括文件扩展呢?可以用上第二个参数。
// 输出:test console.log( path.basename('/tmp/demo/js/test.js', '.js') );
获取文件扩展名
简单的例子如下:
var path = require('path'); var filepath = '/tmp/demo/js/test.js'; // 输出:.js console.log( path.extname(filepath) );
更详细的规则是如下:(假设 path.basename(filepath) === B
)
从B的最后一个.开始截取,直到最后一个字符。
如果B中不存在.,或者B的第一个字符就是.,那么返回空字符串。
直接看官方文档的例子
path.extname('index.html') // returns '.html' path.extname('index.coffee.md') // returns '.md' path.extname('index.') // returns '.' path.extname('index') // returns '' path.extname('.index') // returns ''
路径组合
path.join([...paths]) path.resolve([...paths])
path.join([...paths])
把paths拼起来,然后再normalize一下。这句话反正我自己看着也是莫名其妙,可以参考下面的伪代码定义。
例子如下:
var path = require('path'); // 输出 '/foo/bar/baz/asdf' path.join('/foo', 'bar', 'baz/asdf', 'quux', '..');
path定义的伪代码如下:
module.exports.join = function(){ var paths = Array.prototye.slice.call(arguments, 0); return this.normalize( paths.join('/') ); };
path.resolve([...paths])
这个接口的说明有点啰嗦。你可以想象现在你在shell下面,从左到右运行一遍cd path命令,最终获取的绝对路径/文件名,就是这个接口所返回的结果了。
比如 path.resolve('/foo/bar', './baz')
可以看成下面命令的结果
cd /foo/bar cd ./baz
更多对比例子如下:
var path = require('path'); // 假设当前工作路径是 /Users/a/Documents/git-code/nodejs-learning-guide/examples/2016.11.08-node-path // 输出 /Users/a/Documents/git-code/nodejs-learning-guide/examples/2016.11.08-node-path console.log( path.resolve('') ) // 输出 /Users/a/Documents/git-code/nodejs-learning-guide/examples/2016.11.08-node-path console.log( path.resolve('.') ) // 输出 /foo/bar/baz console.log( path.resolve('/foo/bar', './baz') ); // 输出 /foo/bar/baz console.log( path.resolve('/foo/bar', './baz/') ); // 输出 /tmp/file console.log( path.resolve('/foo/bar', '/tmp/file/') ); // 输出 /Users/a/Documents/git-code/nodejs-learning-guide/examples/2016.11.08-node-path/www/js/mod.js console.log( path.resolve('www', 'js/upload', '../mod.js') );
路径解析
path.parse(path)
path.normalize(filepath)
从官方文档的描述来看,path.normalize(filepath)
应该是比较简单的一个API,不过用起来总是觉得没底。
为什么呢?API说明过于简略了,包括如下:
如果路径为空,返回.,相当于当前的工作路径。
将对路径中重复的路径分隔符(比如linux下的/)合并为一个。
对路径中的.、..进行处理。(类似于shell里的cd ..)
如果路径最后有/,那么保留该/。
感觉stackoverflow上一个兄弟对这个API的解释更实在,原文链接。
In other words, path.normalize is "What is the shortest path I can take that will take me to the same place as the input"
代码示例如下。建议读者把代码拷贝出来运行下,看下实际效果。
var path = require('path'); var filepath = '/tmp/demo/js/test.js'; var index = 0; var compare = function(desc, callback){ console.log('[用例%d]:%s', ++index, desc); callback(); console.log('\n'); }; compare('路径为空', function(){ // 输出 . console.log( path.normalize('') ); }); compare('路径结尾是否带/', function(){ // 输出 /tmp/demo/js/upload console.log( path.normalize('/tmp/demo/js/upload') ); // /tmp/demo/js/upload/ console.log( path.normalize('/tmp/demo/js/upload/') ); }); compare('重复的/', function(){ // 输出 /tmp/demo/js console.log( path.normalize('/tmp/demo//js') ); }); compare('路径带..', function(){ // 输出 /tmp/demo/js console.log( path.normalize('/tmp/demo/js/upload/..') ); }); compare('相对路径', function(){ // 输出 demo/js/upload/ console.log( path.normalize('./demo/js/upload/') ); // 输出 demo/js/upload/ console.log( path.normalize('demo/js/upload/') ); }); compare('不常用边界', function(){ // 输出 .. console.log( path.normalize('./..') ); // 输出 .. console.log( path.normalize('..') ); // 输出 ../ console.log( path.normalize('../') ); // 输出 / console.log( path.normalize('/../') ); // 输出 / console.log( path.normalize('/..') ); });
文件路径分解/组合
path.format(pathObject)
:将pathObject的root、dir、base、name、ext属性,按照一定的规则,组合成一个文件路径。
path.parse(filepath)
:path.format()
path.basename(filepath)<p> < /code></p><p> 확장자 가져오기: <code>path.extname(filepath)</p>
🎜🎜경로 가져오기🎜🎜🎜🎜🎜예제는 다음과 같습니다.🎜🎜🎜┌─────────────────────┬────────────┐ │ dir │ base │ ├──────┬ ├──────┬─────┤ │ root │ │ name │ ext │ " / home/user/dir / file .txt " └──────┴──────────────┴──────┴─────┘ (all spaces in the "" line should be ignored -- they are purely for formatting)
path.basename(filepath)
는 경로의 마지막 부분만 출력하고 파일 이름인지 여부는 확인하지 않습니다. 🎜🎜하지만 대부분의 경우 "파일 이름 가져오기"라는 간단한 방법으로 사용할 수 있습니다. 🎜🎜🎜┌─────────────────────┬────────────┐ │ dir │ base │ ├──────┬ ├──────┬─────┤ │ root │ │ name │ ext │ " C:\ path\dir \ file .txt " └──────┴──────────────┴──────┴─────┘ (all spaces in the "" line should be ignored -- they are purely for formatting)
var path = require('path'); var p1 = path.format({ root: '/tmp/', base: 'hello.js' }); console.log( p1 ); // 输出 /tmp/hello.js var p2 = path.format({ dir: '/tmp', name: 'hello', ext: '.js' }); console.log( p2 ); // 输出 /tmp/hello.js
path.parse('/home/user/dir/file.txt') // returns // { // root : "/", // dir : "/home/user/dir", // base : "file.txt", // ext : ".txt", // name : "file" // }
var path = require('path'); var p1 = path.relative('/data/orandea/test/aaa', '/data/orandea/impl/bbb'); console.log(p1); // 输出 "../../impl/bbb" var p2 = path.relative('/data/demo', '/data/demo'); console.log(p2); // 输出 "" var p3 = path.relative('/data/demo', ''); console.log(p3); // 输出 "../../Users/a/Documents/git-code/nodejs-learning-guide/examples/2016.11.08-node-path"
> path.win32.join('/tmp', 'fuck') '\tmp\fuck' > path.win32.sep '\' > path.win32.join('\tmp', 'demo') '\tmp\demo' > path.win32.join('/tmp', 'demo') '\tmp\demo'
console.log(process.env.PATH) // '/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin' process.env.PATH.split(path.delimiter) // returns ['/usr/bin', '/bin', '/usr/sbin', '/sbin', '/usr/local/bin']
console.log(process.env.PATH) // 'C:\Windows\system32;C:\Windows;C:\Program Files\node\' process.env.PATH.split(path.delimiter) // returns ['C:\Windows\system32', 'C:\Windows', 'C:\Program Files\node\']
path.resolve('/foo/bar', './baz')
는 다음 명령의 결과로 볼 수 있습니다🎜🎜🎜rrreee🎜🎜🎜더 많은 비교 예는 다음과 같습니다. 다음과 같습니다:🎜🎜🎜 rrreee🎜🎜🎜🎜🎜경로 구문 분석🎜🎜🎜🎜🎜path.parse(경로)
🎜🎜🎜path.normalize( filepath)🎜🎜🎜🎜 🎜공식 문서의 설명으로 보면 path.normalize(filepath)
는 비교적 간단한 API여야 하는데, 사용할 때 늘 헷갈리는 부분이 있습니다. 🎜🎜왜? API 설명이 너무 짧고 다음 내용이 포함되어 있습니다. 🎜🎜 경로가 비어 있으면 현재 작업 경로와 동일한 .을 반환합니다. 🎜🎜🎜 경로에서 반복되는 경로 구분 기호(예: Linux의 /)를 하나로 병합합니다. 🎜🎜🎜 경로에서 ., ..를 처리합니다. (셸의 cd와 유사합니다..) 🎜🎜🎜 경로 끝에 /가 있으면 /를 유지합니다. 🎜🎜🎜Stackoverflow의 한 형제가 이 API에 대해 더 현실적인 설명을 하고 있는 것 같습니다. 원본 링크는 다음과 같습니다. 🎜🎜🎜rrreee🎜🎜🎜코드 예시는 다음과 같습니다. 독자가 코드를 복사하고 실행하여 실제 효과를 확인하는 것이 좋습니다. 🎜🎜🎜rrreee🎜🎜🎜🎜🎜파일 경로 분해/조합🎜🎜🎜🎜🎜path.format(pathObject)
:에 따라 pathObject의 루트, dir, 기본, 이름 및 확장 속성을 변경합니다. 특정 규칙을 파일 경로로 결합합니다. 🎜🎜🎜path.parse(filepath)
: path.format()
메서드의 반대 작업입니다. 🎜🎜🎜먼저 공식 홈페이지의 관련 속성 설명을 살펴보겠습니다. 🎜🎜우선, Linux에서는🎜🎜🎜┌─────────────────────┬────────────┐ │ dir │ base │ ├──────┬ ├──────┬─────┤ │ root │ │ name │ ext │ " / home/user/dir / file .txt " └──────┴──────────────┴──────┴─────┘ (all spaces in the "" line should be ignored -- they are purely for formatting)
然后是windows下
┌─────────────────────┬────────────┐ │ dir │ base │ ├──────┬ ├──────┬─────┤ │ root │ │ name │ ext │ " C:\ path\dir \ file .txt " └──────┴──────────────┴──────┴─────┘ (all spaces in the "" line should be ignored -- they are purely for formatting)
path.format(pathObject)
阅读相关API文档说明后发现,path.format(pathObject)
中,pathObject的配置属性是可以进一步精简的。
根据接口的描述来看,以下两者是等价的。
root vs dir:两者可以互相替换,区别在于,路径拼接时,root后不会自动加/,而dir会。
base vs name+ext:两者可以互相替换。
var path = require('path'); var p1 = path.format({ root: '/tmp/', base: 'hello.js' }); console.log( p1 ); // 输出 /tmp/hello.js var p2 = path.format({ dir: '/tmp', name: 'hello', ext: '.js' }); console.log( p2 ); // 输出 /tmp/hello.js
path.parse(filepath)
path.format(pathObject)
的反向操作,直接上官网例子。
四个属性,对于使用者是挺便利的,不过path.format(pathObject)
中也是四个配置属性,就有点容易搞混。
path.parse('/home/user/dir/file.txt') // returns // { // root : "/", // dir : "/home/user/dir", // base : "file.txt", // ext : ".txt", // name : "file" // }
获取相对路径
接口:path.relative(from, to)
描述:从from路径,到to路径的相对路径。
边界:
如果from、to指向同个路径,那么,返回空字符串。
如果from、to中任一者为空,那么,返回当前工作路径。
上例子:
var path = require('path'); var p1 = path.relative('/data/orandea/test/aaa', '/data/orandea/impl/bbb'); console.log(p1); // 输出 "../../impl/bbb" var p2 = path.relative('/data/demo', '/data/demo'); console.log(p2); // 输出 "" var p3 = path.relative('/data/demo', ''); console.log(p3); // 输出 "../../Users/a/Documents/git-code/nodejs-learning-guide/examples/2016.11.08-node-path"
平台相关接口/属性
以下属性、接口,都跟平台的具体实现相关。也就是说,同样的属性、接口,在不同平台上的表现不同。
path.posix
:path相关属性、接口的linux实现。
path.win32
:path相关属性、接口的win32实现。
path.sep
:路径分隔符。在linux上是/,在windows上是``。
path.delimiter
:path设置的分割符。linux上是:,windows上是;。
注意,当使用 path.win32 相关接口时,参数同样可以使用/做分隔符,但接口返回值的分割符只会是``。
直接来例子更直观。
> path.win32.join('/tmp', 'fuck') '\\tmp\\fuck' > path.win32.sep '\\' > path.win32.join('\tmp', 'demo') '\\tmp\\demo' > path.win32.join('/tmp', 'demo') '\\tmp\\demo'
path.delimiter
linux系统例子:
console.log(process.env.PATH) // '/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin' process.env.PATH.split(path.delimiter) // returns ['/usr/bin', '/bin', '/usr/sbin', '/sbin', '/usr/local/bin']
windows系统例子:
console.log(process.env.PATH) // 'C:\Windows\system32;C:\Windows;C:\Program Files\node\' process.env.PATH.split(path.delimiter) // returns ['C:\\Windows\\system32', 'C:\\Windows', 'C:\\Program Files\\node\\']
以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!
相关推荐:
위 내용은 Node.js의 경로 처리 모듈 경로 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











Node.js와 Tomcat의 주요 차이점은 다음과 같습니다. 런타임: Node.js는 JavaScript 런타임을 기반으로 하는 반면 Tomcat은 Java Servlet 컨테이너입니다. I/O 모델: Node.js는 비동기식 비차단 모델을 사용하는 반면 Tomcat은 동기식 차단 모델을 사용합니다. 동시성 처리: Node.js는 이벤트 루프를 통해 동시성을 처리하는 반면 Tomcat은 스레드 풀을 사용합니다. 애플리케이션 시나리오: Node.js는 실시간, 데이터 집약적, 동시성 애플리케이션에 적합하고 Tomcat은 기존 Java 웹 애플리케이션에 적합합니다.

Node.js는 서버측 JavaScript 런타임인 반면, Vue.js는 대화형 사용자 인터페이스를 생성하기 위한 클라이언트측 JavaScript 프레임워크입니다. Node.js는 백엔드 서비스 API 개발, 데이터 처리 등 서버 측 개발에 사용되고, Vue.js는 단일 페이지 애플리케이션, 반응형 사용자 인터페이스 등 클라이언트 측 개발에 사용됩니다.

Node.js는 고성능, 확장성, 크로스 플랫폼 지원, 풍부한 생태계, 개발 용이성 등의 기능을 제공하므로 백엔드 프레임워크로 사용할 수 있습니다.

MySQL 데이터베이스에 연결하려면 다음 단계를 따라야 합니다. mysql2 드라이버를 설치합니다. mysql2.createConnection()을 사용하여 호스트 주소, 포트, 사용자 이름, 비밀번호 및 데이터베이스 이름이 포함된 연결 개체를 만듭니다. 쿼리를 수행하려면 Connection.query()를 사용하세요. 마지막으로 Connection.end()를 사용하여 연결을 종료합니다.

Node.js에는 다음과 같은 전역 변수가 존재합니다. 전역 개체: 전역 핵심 모듈: 프로세스, 콘솔, 필수 런타임 환경 변수: __dirname, __filename, __line, __column 상수: undefine, null, NaN, Infinity, -Infinity

Node.js 설치 디렉터리에는 npm과 npm.cmd라는 두 가지 npm 관련 파일이 있습니다. 차이점은 다음과 같습니다. 확장자가 다릅니다. npm은 실행 파일이고 npm.cmd는 명령 창 바로 가기입니다. Windows 사용자: npm.cmd는 명령 프롬프트에서 사용할 수 있으며, npm은 명령줄에서만 실행할 수 있습니다. 호환성: npm.cmd는 Windows 시스템에만 해당되며 npm은 크로스 플랫폼에서 사용할 수 있습니다. 사용 권장사항: Windows 사용자는 npm.cmd를 사용하고, 기타 운영 체제는 npm을 사용합니다.

Node.js와 Java의 주요 차이점은 디자인과 기능입니다. 이벤트 중심 대 스레드 중심: Node.js는 이벤트 중심이고 Java는 스레드 중심입니다. 단일 스레드 대 다중 스레드: Node.js는 단일 스레드 이벤트 루프를 사용하고 Java는 다중 스레드 아키텍처를 사용합니다. 런타임 환경: Node.js는 V8 JavaScript 엔진에서 실행되는 반면 Java는 JVM에서 실행됩니다. 구문: Node.js는 JavaScript 구문을 사용하고 Java는 Java 구문을 사용합니다. 목적: Node.js는 I/O 집약적인 작업에 적합한 반면, Java는 대규모 엔터프라이즈 애플리케이션에 적합합니다.

예, Node.js는 백엔드 개발 언어입니다. 서버 측 비즈니스 로직 처리, 데이터베이스 연결 관리, API 제공 등 백엔드 개발에 사용됩니다.
