2021. 6. 2. 13:25ㆍNode.js
js에선 배열 안에 들어가는 데이터 타입이 뭐든 상관없음
let array = ['nodejs', {},10,true];
let node = array [0];
let obj = array [1];
let bool = array [3];
const [node, obj, bool] = array;
console.log(node, obj, bool);
new 라는 키워드를 통해서 프로미스를 생성할 수 있다.
안에 resolve와 reject를 매개변수로 갖는 콜백 함수를 넣어준다.
then과 catch 메서드를 붙일 수 있다.
resolve(성공)가 호출되면 then 이 실행되고, reject(실패)가 호출되면 catch가 실행된다.
then이나 catch에서 다시 다른 then이나 catch를 붙일 수 있다.
프로미스를 return한 경우 프로미스가 수행된 후 then이나 catch가 호출된다.
1. 프로미스 객체 생성
2. resolve, reject 매개변수가 있는 콜백을 전달
3. 프로미스 객체가 있는 변수에 then 또는 catch 를 붙힌다.
//new 프로미스 객체 생성
//new Primise((resolve, reject)=>{});
let promise=new Promise(function(resolve, reject){
//기능구현
let x =0;
if(x==0){
let status ={
desc: '테스트 상태 객체'
};
status.code=200; //동적 할당
status.message="ok";
resolve(status);
}
else{
reject('error');
}
});
promise.then(
function(value){
console.log(value);
},
function(err){
console.log(err)
},
)
await/async (유니티의 코루틴과 비슷하다.)
1. await 를 사용하는 함수가async라는 키워드로 선언이 되어있어야 한다.
2. await 함수는 resolve 될 때까지 기다린 다음에 다음 로직으로 넘어간다.
3. 프로미스의 catch 메서드처럼 try/catch가 받아준다.
모듈로 만들기
모듈이란 특정한 기능을 하는 함수나 변수들의 집합이다.
모듈로 만들어두면 여러 프로그램에서 가져와 재사용할 수 있다.
module.export={객체 담기}
//var.js
const odd= '홀수';
const even= '짝수';
module.exports = {
odd, even
};
//func.js
const{odd,even} = require('./var');
console.log(odd,even);
const{odd,even} = require('./var');
console.log(odd,even);
function checkOddOrEven(num){
if(num % 2){
return odd;
}
else{
return even;
}
}
module.exports = checkOddOrEven;
//index.js
const {} = require('./var');
const checkNumber = require('./func');
function checkStringOddOrEven(str){
if(str.length % 2){
return odd;
}
else{
return even;
}
}
console.log(checkNumber(10));
console.log(checkStringOddOrEven('hello'));
//var.js
exports.odd = '홀수입니다.';
exports.even = '짝수입니다.';
//동적으로 exports에 객체를 생성했다.
//filename.js
const {odd,even} = require('./var');
console.log(odd,even);
브라우저 안에서 사용할 수 있는 객체 =window
노드 내에서 사용할 수 있는 객체 = global
const string = '홍길동';
const number = 1;
const boolean = true;
const obj = {
outside:{
inside: {
key: 'value'
}
}
};
console.time('전체시간');
console.log('로그입니다.');
console.log(string,number,boolean);
console.error('에러메시지');
console.dir(obj,{colors: false,depth:2});
console.dir(obj,{colors: true,depth:1});
console.time('시간측정');
for(let i =0;i<10000;i++)
{
continue;
}
console.timeEnd('시간측정');
function b(){
console.trace('에러 위치 추적');
}
function a(){
b();
}
console.timeEnd('전체시간');
const timeout = setTimeout(()=>{
console.log('1.5초 후 실행');
},1500);
setTimeout(()=>{
console.log('clear')
clearTimeout(timeout)
},2500);
setInterval(()=>{
console.log('1초마다 실행');
},1000);
let interval = setInterval(()=>{
console.log('1초마다 실행');
},1000);
setTimeout(()=>{
clearInterval(interval);
},2500);
console.log(__filename);
console.log(__dirname);
※js 에선 == 값을 비교하고, === 값+타입을 비교한다.
process.nextTick
이벤트 루프가 다른 콜백 함수들보다 먼저 처리하도록 만든다.
setImmediate나 setTimeout보다 먼저 실행된다.
path
폴더와 파일의 경로를 쉽게 조작하도록 만들어주는 모듈이다.
url
인터넷 주소를 쉽게 조작해도록 도와주는 모듈
querystring
url대신 기존 노드의url을 사용할 때 서치 부분을 사용하기 쉽게 객체로 만드는 모듈
url의 ?뒷부분의 query 데이터
crypto
암호화를 도와주는 모듈
fs
파일 시스템에 접근하는 모듈이다.
파일을 생성하거나, 삭제하고, 읽거나 쓸 수 있다.
const fs = require('fs');
fs.readFile('./readme.txt',(error,data)=>{
if(error) throw error;
console.log(data);
console.log(data.toString());
});
const fs = require('fs');
fs.readFile('./readme.txt',(error,data)=>{
if(error) throw error;
console.log(data);
console.log(data.toString());
});
fs.writeFile('./writeme.txt','안녕하세요',(err)=>{
if(err) throw err;
});
버퍼와 스트림
파일을 읽거나 쓰는 방식에는 두 가지 방식이 있다.
1. 버퍼를 이용
버퍼링은 영상을 재생할 수 있을 때까지 데이터를 모으는 동작
2. 스트림을 이용
방송인의 컴퓨터에서 사용인의 컴퓨터로 데이터를 조금씩 전송하는 동작
노드의 버퍼와 스트림도 비슷함
리드파일 메서드에서 사용할 떄 읽었던 파일이 버퍼 형식으로 출력되었다.
노드는 파일을 읽을 때 메모리에 파일 공간만큼을 마련해두고, 데이터를 조금씩 읽어와 출력한다.
버퍼에서 한꺼번에 데이터를 보내면 속도가 느리기에 데이터를 조각으로 나누어 조금씩
보내는 것으로 보완함 > 스트리밍
여기서 잘려진 작은 조각 데이터 = chunk
이벤트
const EventEmitter = require('events');
const myEvent = new EventEmitter();
myEvent.addListener('event1',()=>{
console.log('이벤트1'); //이벤트 등록
});
myEvent.emit('event1'); //이벤트 실행
유니티에서 버튼에 addListener와 같다.
예외 처리하기★★★★
노드에서는 예외 처리가 중요하다.
하나뿐인 스레드가 에러로 인해 멈추면 전체 서버가 멈출수도 있다.
그래서 같은 기능을 담은 서버를 여러 개 만들어서 하나가 뻑나면 다른 하나로 넘겨준다. = 스케일링
서버통신 시 예외적인 에러들이 자주 발생하니 어디에서 에러가 났는지 찾아내기 위해서
문제가 생길 수 있는 부분엔 try/catch로 에러를 받아주어 로그라도 남기도록 한다.
'Node.js' 카테고리의 다른 글
0609 express 서버 열기 (0) | 2021.06.09 |
---|---|
0608 npm express 웹 서버 만들기 (0) | 2021.06.08 |
0608 REST API와 라우팅 (0) | 2021.06.04 |
0603 http 모듈로 서버 만들기 (0) | 2021.06.03 |
0601 Node.js (0) | 2021.06.01 |