티스토리 뷰
[노드 내장 객체]
:: 바로 가져다 쓸 수 있다. require 불필요
- 글로벌
- 콘솔
- 타이머
- 파일 네임 / 디렉토리 네임 : 경로 불러오기
- module.exports (내보내기)// require('./var') (불러오기)
- 프로세스 :: 노드제이에스가 실행되는 정보. 버전. 아키텍처
- env
- 프로세스.넥스트틱 제일 먼저 실행시킴
- 프로세스.exit() 실행 종료
[노드 내장 모듈]
: require 모듈 형태로 불러야 할 때
- os
- path
- url모듈
- 쿼리 스트링
- 크립토 : 암호화
- 유틸 : 각종 편의 기능 모음
- 스레드 : 멀티 스레드로 바꿔줌 Worker를 통해서 조정 가능.
- 차일드 프로세스 :: 노드 js 아닌 프로그램도 사용 가능 exec 터미널에서 쓰는 쉘 접근 가능 터미널 명령어 정상 처리되면 : stdout // 정상처리 안되면 stderror
- 스폰 spawn 다른 프로그램 실행시킬 때 :: 파이썬 // 이벤트 리스너 달아서 // 정상 처리되면 : stdout // 정상처리 안되면 stderror
>>>노드 내장 객체
[Timer]
setTimeout(콜백함수,밀리초): 정해진 시간 이후에 함수 실행
setInterval(콜백함수,밀리초): 주어진 밀리 초마다 반복 실행
seImmediate(콜백함수) : 제일 빨리 실행시키고 싶은 함수. 즉시 실행
const timeout = setTimeout(()=>{
console.log('setTimeout');
},1000)
clearTimeout(timeout)//타이머 취소하기
const interval = setInterval(()=>{
console.log('interval');
},1000)
clearInterval(interval)
const immediate = setImmediate(()=>{
console.log('즉시실행');
})
clearImmediate(immediate)
*응용
const timeout = setTimeout(()=>{
console.log('1.5초 후 실행')
},1500)
const interval = setInterval(()=>{
console.log('1초마다');
},1000)
const timeout2 = setTimeout(()=>{
console.log('4초 후 실행')
},4000)
setTimeout(()=>{
clearTimeout(timeout2)
clearInterval(interval)
},3500)
const immediate = setImmediate(() =>{
console.log('즉시실행');
})
//즉시실행
//1초마다
// 1.5초 후 실행
// 1초마다
// 1초마다
[module.exports]
module.exports = 'haha'
require('./var')
console.log(require.main.children[0],exports);
[process]
: 현재 실행되고 있는 노드 포로 세스에 대한 정보를 담고 있다.
window cmd 콘솔에 입력
PS C:\\Users\\user> node
Welcome to Node.js v16.13.1.
Type ".help" for more information.
> process.version
'v16.13.1'
> process.uptime
[Function: uptime]
> process.
프로세스의 정보를 검색해 볼 수 있다.
환경변수를 볼 수 있다.
nextTIck은 immdiate보다도 빨리 작동한다.
prodess.exit();은 과정을 종료시킨다.
>>>노드 내장 모듈
[os모듈]
: 자기 컴퓨터 정보를 확인할 수 있다.
웹브라우저 JS는 os확인 불가능
> os.totalmem()
16985473024
> os.cpus()
[
{
model: 'Intel(R) Core(TM) i5-10210U CPU @ 1.60GHz',
speed: 2112,
times: { user: 707843, nice: 0, sys: 665375, idle: 16730109, irq: 155250 }
},
{
model: 'Intel(R) Core(TM) i5-10210U CPU @ 1.60GHz',
speed: 2112,
times: { user: 371890, nice: 0, sys: 241031, idle: 17489609, irq: 7781 }
},
{
model: 'Intel(R) Core(TM) i5-10210U CPU @ 1.60GHz',
speed: 2112,
times: { user: 1304875, nice: 0, sys: 604515, idle: 16193140, irq: 16515 }
},
{
model: 'Intel(R) Core(TM) i5-10210U CPU @ 1.60GHz',
speed: 2112,
times: { user: 533203, nice: 0, sys: 298218, idle: 17271093, irq: 21906 }
},
{
model: 'Intel(R) Core(TM) i5-10210U CPU @ 1.60GHz',
speed: 2112,
times: { user: 1026750, nice: 0, sys: 485531, idle: 16590234, irq: 22734 }
},
{
model: 'Intel(R) Core(TM) i5-10210U CPU @ 1.60GHz',
speed: 2112,
times: { user: 402515, nice: 0, sys: 266718, idle: 17433281, irq: 15640 }
},
{
model: 'Intel(R) Core(TM) i5-10210U CPU @ 1.60GHz',
speed: 2112,
times: { user: 807437, nice: 0, sys: 476781, idle: 16818296, irq: 21437 }
},
{
model: 'Intel(R) Core(TM) i5-10210U CPU @ 1.60GHz',
speed: 2112,
times: { user: 466234, nice: 0, sys: 348281, idle: 17288000, irq: 7765 }
}
]
> os.homedir()
'C:\\\\Users\\\\user'
> os.type()
'Windows_NT'
> os.cpus().lenth
undefined
>
[path모듈]
폴더와 파일 경로를 쉽게 조작
var url = require('url');
var urlObject = url.parse('<http://localhost:3000/path/abc.php?id=student&page=12#hash>');
console.log(urlObject); // url 객체 정보 출력
console.log(url.format(urlObject)); // url 객체를 문자열로 출력
console.log('url.parse() : ', urlObject);
url의 풀 경로
[crypto]
비밀번호 → 암호화
암호화를 도와주는 모듈
- 단방향 암호화 createHash
인코드 가능 디코드 불가능
//암호화
const crypto = require('crypto')
crypto.randomBytes(64,(err,buf) => {
const salt = buf.toString('base64')
console.log('salt',salt)
crypto.pbkdf2('비밀번호',salt,100000,64, 'sha512',(err,key)=>{
console.log('password:', key.toString('base64')
)
})
})
PS C:\\Users\\user\\Desktop\\java\\code> node url
salt CqZcjfUp81sE6qMhV5ZIEnq2gxiMrUEuQ7nZYnrqWjncTN2aGuuw6AI4MvJ1qwyXtGpBQg7qw0T7reKbiGB56A==
password: OsYky0X9cDvGeGH/KKu/rdjuvDXOlAjZXW9mNGKcINyfTje+eL2kJHQ93lB1lKqmfZVmrpLaFVoKiN0obOPnRQ==
- 양방향
키값과
알고리즘이 동일하다면
암호화 복구가능
chipher
decipher
[util]
: 각종 편의 기능을 모아둔 모듈
deprecated : 이 버전은 나중에 사용되지 않을 것이다 : 경고해줄 때
promisify ... 콜백 대신. then으로 쓰게 깔끔하게 바꿔줄 수 있게 하는 기능
[worker_threads]
스레드 : 작업자 수
잘 안 쓴다
[child_process]
다른 프로그램을 실행시키고 싶을 때 쓰는 모듈
[fs 모듈] : 파일 시스템 접근
파일 시스템에 접근하려면 fs 모듈이 필요하다.
버퍼 : 데이터를 한 번에 때려박을떄
stream : 배열 안에 내 데이터를 쪼개서 넣음
버퍼로 받은 데이터.toString() 해야 한다.
console.log(__dirname)
//경로확인
console.log(__filename)
//경로 + 파일이름
const fs = require('fs') //fs모듈을 불러온다
fs.readFile("./readme.txt",(err,data)=>{
if(err){
throw err
}
console.log(data);//data는 버퍼형태로 되어있다
console.log(data.toString());//data를 스트링 형태로 읽을수 있게 바꿔줌.
// })//파라미터 1.내가읽고싶은거 2.콜백함수callback: (err: NodeJS.ErrnoException, data: Buffer
// //<Buffer ec a0 80 eb a5 bc 20 ec 9d bd ec 96 b4 ec a3 bc ec 84 b8 ec 9a 94 2e>
// //저를 읽어주세요.
//프라미스로 바꿔서 간편하게 사용가능하다.
const fs = require('fs').promises
fs.readFile("./readme.txt")
.then((data)=>{ //덴 사용가능
console.log(data);
console.log(data.toString())
})
.catch((err)=>{ //에러 처리
console.error(err)
})
const fs = require('fs').promises
fs.writeFile('./writeme.txt','파일을 쓰겠습니다.')//경로와 파일이름 , 파일 안에 쓸 내용
// 콘솔에서 실행시키면 파일 생성된다.
.then(()=>{
return fs.readFile("./writeme.txt")
})
.then((data)=>{
console.log(data)
console.log(data.toString())
})
.catch ((err)=>{
console.error(err)
})
//<Buffer ed 8c 8c ec 9d bc ec 9d 84 20 ec 93 b0 ea b2 a0 ec 8a b5 eb 8b 88 eb 8b a4 2e>
//파일을 쓰겠습니다.
//생성한 파일을 읽을 수 있다.
const fs = require('fs').promises
//readme file을 읽어라
fs.readFile('./readme.txt')
.then((data)=>{
console.log(data)
})
.catch((err)=>{
console.error(err)
})
//readme file1을 읽어라
fs.readFile('./readme1.txt')
.then((data)=>{
console.log(data)
})
.catch((err)=>{
console.error(err)
})
//write me 파일을 만들고 파일을 출력해라.
fs.writeFile('./writeme.txt','writeme입니다!')
.then(()=>{
return fs.readFile('./writeme.txt')
})
.then((data)=>{
console.log(data.toString());
})
.catch((err)=>{
console.error(err)
})
//wirteme1 파일을 만들고 그 파일에 path모듈을 사용해서 경로를 출력. 후 그 파일을 출력해라.
fs.writeFile('./writeme1.txt',__dirname)
.then((ata)=>{
return fs.readFile('./writeme1.txt')
})
.then((data)=>{
console.log(data.toString());
})
.catch((err)=>{
console.error(err)
})
[버퍼]
버퍼로 바꿔주는것
from
어레이로 버퍼 조각나 있을떄
합쳐주는 것
concat
빈 버퍼 . 길이 정해줄떄
버퍼.alloc
버퍼 출력 toString()
//버퍼로 바꿔보자
const buffer = Buffer.from('저를 버퍼로 바꿔보세요.')
console.log(buffer);
//버퍼의 렝스 구하기
console.log(buffer.length);
console.log(buffer.toString())
const arr = [
Buffer.from('1번'),
Buffer.from('2번'),
Buffer.from('3번')
]
//나눠놓은것 합친다 concat
const buffer2 = Buffer.concat(arr)
console.log(buffer2.toString());
const buffer3 = Buffer.alloc(10)//빈버퍼 :어록 버퍼길이 정해줌
console.log(buffer3);
//<Buffer 00 00 00 00 00 00 00 00 00 00>
[스트림]
const fs = require('fs')
const readStream = fs.createReadStream('./readme.txt',{highWaterMark:16}) //스트림 데이터를 불러온다.:옵션 조각의 길이
const data = []
//이벤트로 받는다.
readStream.on('data',(chunk)=>{ // DATA이벤트발생하면 콜백함수 발생 (인자 CHUNK)
data.push(chunk) // 배열에 조각난chunk 추가한다
console.log('data',chunk,chunk.length);
})
//리드미를 다 읽을떄 까지 발생한다.
//다읽으면 end
readStream.on('end',()=>{
console.log('end :',Buffer.concat(data).toString());
})
readStream.on('err',(err)=>{
console.log('err:',err);
})
const fs = require('fs')
const readStream = fs.createReadStream('./readme.txt',{highWaterMark:16})
const data = []
readStream.on('data',(chunk)=>{
data.push(chunk)
console.log('data',chunk,chunk.length);
})
readStream.on('end',()=>{
console.log('end :',Buffer.concat(data).toString());
})
readStream.on('err',(err)=>{
console.log('err:',err);
})
[스트리밍 라이트]
stream write
const fs = require('fs')
const writeStream = fs.createWriteStream('write-stream.txt')
writeStream.on('finisi', ()=>{
console.log('파일쓰기완료');
})
writeStream.write('이 글을 씁니다. \\n')
writeStream.write('n 다음 행으로 넘어감.')
writeStream.end() //파일쓰기 완료됨 finish
//실행하면 txt 파일 생성된다.
const readStream = fs.createReadStream('./readme.txt')
const writeStream1 = fs.createWriteStream('write-stream_copy.txt')
readStream.pipe(writeStream1) //카피본 만들기
fs : 파일
싱크 async
프로세스.메모리
const fs = require('fs')
console.log('1:sync',process.memoryUsage().rss);
//1
const data1 = fs.readFileSync('./big.txt')
fs.writeFileSync('./big2.txt',data1)
console.log('2:sync',process.memoryUsage().rss);
//2
console.log('3:stream',process.memoryUsage().rss);
const streamData1 = fs.createReadStream('./big.txt')
const streamData2 =fs.createWriteStream('./big3.txt')
streamData1.pipe(streamData2)
streamData1.on('end',()=>{
console.log('4:stream',process.memoryUsage().rss);
})
[이벤트]
const EventEmitter = require('events')
const myEvent = new EventEmitter()
//이벤트 등록
myEvent.on('event1', ()=>{
console.log('이벤트1');
})
myEvent.on('event1', ()=>{
console.log('이벤트1 추가발생');
})
myEvent.once('event2',()=>{
console.log('이벤트 2 발생!');
})//이벤트를 한번밖에 실행을 못시킨다.
//함수로 콜백대신 부르기
const listner = () =>{
console.log('event4 발생');
}
myEvent.on('event4',listner)
//이벤트 리스너 지우기
myEvent.removeListener('event4',listner)
//한번에 제거
myEvent.removeAllListeners('event1')
//이벤트 발생시키기
myEvent.emit('event1')
myEvent.emit('event1')
myEvent.emit('event2')
myEvent.emit('event2')
myEvent.emit('event4')
//현재 리스너가 몇개 연결되어 있는지 확인
console.log(myEvent.listenerCount('evnet1'));
//이벤트1
//이벤트1 추가발생
//이벤트1
//이벤트1 추가발생
//이벤트 2 발생!
//이벤트2는 한번만 발생.
[예외 처리하기]
process.on('uncaughtException', (err) => {
console.error('예기치 못한 에러', err);
process.exit();
});
setInterval(() => {
throw new Error('서버를 고장내주마!');
}, 1000);
setTimeout(() => {
console.log('실행됩니다');
}, 2000);
setInterval(() => {
console.log('시작');
try {
throw new Error('서버를 고장내주마!');
} catch (err) {
console.error(err);
}
}, 1000);
console.log(process.argv);
const fs = require('fs');
setInterval(() => {
fs.unlink('./abcdefg.js', (err) => {
if (err) {
console.error(err);
}
});
}, 1000);
*실습
// 1. fs.copyFile로 readme.txt, writeme.txt로 복사하기
// 2. then으로 "복사완료" 출력하기
// 3. catch로 오류잡고, err 출력하기
// 4. 복사할 파일이 없을 때, 복사할 파일 생성(readme.txt, 내용은 "복사할 파일입니다. wirteme.txt에 쓰도록 하겠습니다.")하고,
// writeme.txt 복사하기 (여러번 실행해서 처리해도 됨!)
const fs = require('fs').promises
fs.copyFile('readme.txt', 'writeme.txt')
.then(() => {
console.log("복사완료")
})
.catch(err => {
console.error(err)
if(err.code === "ENOENT") {
fs.writeFile('readme.txt', '복사할 파일입니다. writeme.txt에 쓰도록 하겠습니다.')
}
})
'Web > Backend_node.js기초' 카테고리의 다른 글
Express : 라우터 관리 (0) | 2022.02.07 |
---|---|
Node.js_Express 모듈 / 미들웨어 (0) | 2022.02.04 |
Node.js_ htt 모듈 (0) | 2022.02.04 |
Node.js_시작 . (0) | 2022.02.04 |
AJAX_axios 통신 라이브러리 : 웹 앱 (0) | 2022.02.04 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- VR
- StableDiffusion
- emotive eeg
- three.js
- Java
- houdini
- node.js
- 유니티
- MQTT
- DeepLeaning
- motor controll
- unity 360
- Arduino
- 라즈베리파이
- docker
- opencv
- Unity
- JacobianMatrices
- oculuspro
- ardity
- colab
- Python
- 유니티플러그인
- TouchDesigner
- sequelize
- Express
- AI
- CNC
- 후디니
- RNN
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
글 보관함