이 글은 nodejs의 모듈과 메소드에 대한 자세한 소개를 담고 있습니다. 도움이 필요한 친구들이 참고할 수 있기를 바랍니다.
1. 모듈 로딩 사양
ES6 이전에도 js 모듈 로딩 솔루션이 있었는데, 가장 중요한 것은 CommonJS와 AMD 사양이었습니다. commonjs는 주로 nodejs와 같은 동기 로딩을 달성하기 위해 서버에서 사용됩니다. AMD 사양은 비동기 로딩을 위해 requirejs와 같은 브라우저에 적용됩니다. seaJS와 같은 동기 로딩 솔루션에 대한 CMD 사양도 있습니다.
Nodejs에는 간단한 모듈 로딩 시스템이 있습니다. Nodejs에서 파일과 모듈은 일대일 대응을 갖습니다(각 파일은 독립적인 모듈로 간주됩니다).
require가 볼 수 있는 유일한 객체는 module.exports입니다. 이는 내보내기 객체를 볼 수 없으며, 모듈을 작성할 때 사용하는 내보내기 객체는 실제로 module.exports에 대한 참조일 뿐입니다.
2, module.exports 및 imports
Nodejs의 모든 모듈은 자동으로 모듈 객체를 생성합니다. 동시에 모듈 객체 아래에는 특정 클래스의 인스턴스를 모듈에 할당할 수 있습니다. 이 클래스의 인스턴스를 내보내려면 내보냅니다.
모듈이 실행되기 전에 Nodejs는 module.exports.f = ...를 더 간결하게 작성할 수 있도록 전역 변수 내보내기에 module.exports의 값을 할당합니다. 참고: 모든 변수와 마찬가지로 내보내기가 다시 할당되면 더 이상 module.exports에 바인딩되지 않으며 지정된 모듈은 내보내지지 않습니다
3 요구 메커니즘
은 Y가 경로, X라고 가정합니다. 파일 이름 또는 디렉터리 이름입니다. Nodejs가 require(Y+X)를 발견하면 다음 순서로 처리됩니다.
1. 모듈(예: require("http")
b. 더 이상 실행되지 않습니다
2. Y가 "./", "/" 또는 "../"로 시작하는 경우(상대 경로와 절대 경로 모두 고려됨) 파일 모듈입니다.
a. 지정된 경로부터 시작하여 X를 파일로 취급합니다. 그리고 다음 파일을 순서대로 검색합니다: X, X.js, X.json, Execute
b. X를 지정된 경로부터 시작하여 디렉터리로 취급하고 다음 파일을 순서대로 검색합니다: X/package.json (메인 필드), X/index.js, X/index.json, 존재하는 경우 파일로 돌아가 더 이상 실행을 중단합니다
3. npm으로 설치한 타사 모듈, 패키지
X가 핵심 모듈이 아니고 "./", "/" 또는 "../"로 끝나지 않습니다. 처음에 Nodejs는 현재 모듈의 상위 디렉터리에서 시작하여 /node_module 디렉터리에서 모듈을 로드하려고 시도합니다. . 그래도 찾지 못하면 파일 시스템의 루트 디렉터리까지 다음 상위 디렉터리로 이동합니다
4. "찾을 수 없음" 던지기
4, import와 require의 차이
ES6 표준이 출시된 후 모듈이 표준이 되었습니다. 표준 용도는 내보내기 명령으로 인터페이스를 내보내고(모듈 출력) 가져오기로 모듈을 도입하는 것입니다. 그러나 우리는 일반적인 노드 모듈에서 CommonJS 사양을 채택하고 있습니다. 모듈을 소개하려면 require를 사용하고, 인터페이스를 내보내려면 module.exports를 사용하세요.
ES6은 언어 사양 수준에서 모듈 기능을 구현하며 구현이 매우 간단하여 기존 CommonJS 및 AMD 사양을 완전히 대체할 수 있으며 브라우저 및 서버를 위한 범용 모듈 솔루션이 될 수 있습니다.
import 구문은 require와 다르며, import는 파일의 시작 부분에 위치해야 하며 앞에 다른 논리 코드는 허용되지 않습니다
import $ from 'jquery'; import * as _ from '_'; import {a,b,c} from './a'; import {default as alias, a as a_a, b, c} from './a';
require의 사용은 매우 간단합니다. module.exports의 포털과 동일합니다. require의 결과는 무엇입니까? require의 변수는 병렬 공간에서 require와 module.exports의 위치를 겹치는 것과 같습니다. 이를 사용할 때 모듈화 개념을 완전히 무시하고 require를 사용할 수 있습니다. 노드의 내장 전역 함수로 취급하면 됩니다. 해당 매개변수는 표현식
require('./a')(); // a模块是一个函数,立即执行a模块函数 var data = require('./a').data; // a模块导出的是一个对象 var a = require('./a')[0]; // a模块导出的是一个数组
5, 노드 비동기 프로그래밍 I/0 및 이벤트 루프
일 수도 있습니다. 노드 .js 비동기 프로그래밍의 직접적인 표현은 콜백입니다. 콜백 함수는 작업 완료 후 호출됩니다. Node는 많은 콜백 함수를 사용합니다. 모든 Node API는 콜백 함수를 지원합니다.
다른 명령을 실행하면서 파일을 읽을 수 있습니다. 파일 읽기가 완료된 후 콜백 함수의 매개변수로 파일 내용을 반환합니다. 이렇게 하면 코드를 실행하는 동안 파일 I/O 작업을 차단하거나 기다리지 않습니다. 이는 Node.js의 성능을 크게 향상시키고 많은 수의 동시 요청을 처리할 수 있습니다.
Node.js 是单进程单线程应用程序,但是通过事件和回调支持并发,所以性能非常高。Node.js 的每一个 API 都是异步的,并作为一个独立线程运行,使用异步函数调用,并处理并发。
Node.js 基本上所有的事件机制都是用设计模式中观察者模式实现。Node.js 单线程类似进入一个while(true)的事件循环,直到没有事件观察者退出,每个异步事件都生成一个事件观察者,如果有事件发生就调用该回调函数.
6,nodejs事件系统 Node.js EventEmitter
Node.js 所有的异步 I/O 操作在完成时都会发送一个事件到事件队列。EventEmitter 对象如果在实例化时发生错误,会触发 error 事件。当添加新的监听器时,newListener 事件会触发,当监听器被移除时,removeListener 事件被触发。
// 引入 events 模块 var events = require('events'); // 创建 eventEmitter 对象 var eventEmitter = new events.EventEmitter();
方法:
1,addListener(event, listener) 为指定事件添加一个监听器到监听器数组的尾部。
2,on(event, listener) 为指定事件注册一个监听器,接受一个字符串 event 和一个回调函数。
3,removeListener(event, listener) 移除指定事件的某个监听器,监听器必须是该事件已经注册过的监听器。它接受两个参数,第一个是事件名称,第二个是回调函数名称。
4,removeAllListeners([event]) 移除所有事件的所有监听器, 如果指定事件,则移除指定事件的所有监听器
5, listeners(event) 返回指定事件的监听器数组。
6,emit(event, [arg1], [arg2], [...]) 按参数的顺序执行每个监听器,如果事件有注册监听返回 true,否则返回 false。
7,nodejs文件系统
异步和同步:Node.js 文件系统(fs 模块)模块中的方法均有异步和同步版本,例如读取文件内容的函数有异步的 fs.readFile() 和同步的 fs.readFileSync()。异步的方法函数最后一个参数为回调函数,回调函数的第一个参数包含了错误信息(error)。
方法:
1、打开文件 fs.open(path, flags[, mode], callback)
2、获取文件信息 fs.stat(path, callback)
3、写入文件 fs.writeFile(file, data[, options], callback)
4、读取文件 fs.read(fd, buffer, offset, length, position, callback)
参数使用说明如下:
fd - 通过 fs.open() 方法返回的文件描述符。
buffer - 数据写入的缓冲区。
offset - 缓冲区写入的写入偏移量。
length - 要从文件中读取的字节数。
position - 文件读取的起始位置,如果 position 的值为 null,则会从当前文件指针的位置读取。
callback - 回调函数,有三个参数err, bytesRead, buffer,err 为错误信息, bytesRead 表示读取的字节数,buffer 为缓冲区对象。
5、关闭文件 fs.close(fd, callback)
6、截取文件 fs.ftruncate(fd, len, callback)
7、删除文件 fs.unlink(path, callback)
8、创建目录 fs.mkdir(path[, mode], callback)
9、读取目录 fs.readdir(path, callback)
10、删除目录 fs.rmdir(path, callback)
8、Node.js Stream(流)
Stream 是一个抽象接口,Node 中有很多对象实现了这个接口。例如,对http 服务器发起请求的request 对象就是一个 Stream,还有stdout(标准输出)。
所有的 Stream 对象都是 EventEmitter 的实例。常用的事件有:
data - 当有数据可读时触发。
end - 没有更多的数据可读时触发。
error - 在接收和写入过程中发生错误时触发。
ㅋㅋㅋ > 완료 - 모든 데이터가 기본 시스템에 기록되면 트리거됩니다. 1. 읽을 수 있는 스트림 만들기 var readerStream = fs.createReadStream('input.txt'); 2 쓰기 가능한 스트림을 만들고 이를 output.txt 파일에 씁니다 varwriterStream = fs .createWriteStream( 'output.txt');3. 읽기 및 쓰기 작업을 파이프하고, input.txt 파일의 내용을 읽고, 해당 내용을 output.txt 파일에 씁니다 readerStream.pipe(writerStream) 4 , Compressed input.txt 파일을 input.txt.gz로, 체인 스트림 fs.createreadstream('input.txt'). PIPE(zlib.creategzip()));5. 파일을 input.txt에 저장하세요. input.txt')); 9. Node.js 전역 개체 JavaScript에는 전역 개체(Global Object)라는 특수 개체가 있으며, 해당 개체의 모든 속성은 다음과 같습니다. 프로그램의 어느 곳에서나, 즉 전역 변수에 액세스됩니다. 1. __filename __filename은 현재 실행 중인 스크립트의 파일 이름을 나타냅니다. 파일 위치의 절대 경로를 출력하며 명령줄 매개변수에 지정된 파일 이름과 다를 수 있습니다. 모듈에 있는 경우 반환된 값은 모듈 파일의 경로입니다. 2. __dirname __dirname은 현재 실행 중인 스크립트가 위치한 디렉터리를 나타냅니다. 3. setTimeout(cb, ms) setTimeout(cb, ms) 전역 함수는 지정된 밀리초(ms) 수 후에 지정된 함수(cb)를 실행합니다. :setTimeout()은 지정된 함수를 한 번만 실행합니다. 타이머를 나타내는 핸들 값을 반환합니다. 4.clearTimeout(t)clearTimeout(t) 전역 함수는 setTimeout()을 통해 이전에 생성된 타이머를 중지하는 데 사용됩니다. 매개변수 t는 setTimeout() 함수를 통해 생성된 타이머입니다. 5. setInterval(cb, ms) setInterval(cb, ms) 전역 함수는 지정된 밀리초(ms) 후에 지정된 함수(cb)를 실행합니다. 타이머를 나타내는 핸들 값을 반환합니다. 타이머는 ClearInterval(t) 함수를 사용하여 지울 수 있습니다. setInterval() 메서드는 ClearInterval()이 호출되거나 창이 닫힐 때까지 계속해서 함수를 호출합니다. 6. 콘솔 콘솔은 콘솔 표준 출력을 제공하는 데 사용됩니다. Internet Explorer의 JScript 엔진에서 제공하는 디버깅 도구이며 이후 점차 브라우저의 구현 표준이 되었습니다. 7. 프로세스 프로세스는 전역 변수, 즉 전역 개체의 속성입니다. 현재 Node.js 프로세스 상태를 기술하는데 사용되는 객체로 운영체제와의 간단한 인터페이스를 제공합니다. 중요한 속성에는 표준 입력 및 출력 스트림 stdin 및 stdout이 포함됩니다 관련 권장 사항:js 코드를 사용하여 페이지 간 데이터 전송을 구현합니다
위 내용은 nodejs의 모듈과 메소드에 대한 자세한 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!