ES6+ 에서 추가된 문법. 여전히 프로토타입 기반으로 동작
var Human = function(type){
this.type = type || 'human';
};
Human.isHuman = function(human){
return human instanceof Human;
}
Human.prototype.breathe=function() { alert('h-a-a-am')}
var Zero = function(type, firstName, lastName){
Human.apply(this, arguments);
this.firstName = firstName;
this.lastName = lastName;};
Zero.prototype = Object.create(Human.prototype);
Zero.prototype.constructor = Zero; // 상속하는 부분
Zero.prototype.sayName = function(){alert(this.firstName).,.}
const condition = true;
const promise = new Promise((resolve, reject) => {
if (condition) resolve("성공");
else reject("실패");
}); // promise 객체 생성
promise
.then((message) => console.log(message)) //성공(resolve)한 경우 실행
.catch((err) => console.error(err)) //실한 경우 실팽
.finally(() => console.log("무조건"));// 끝나고 무조건 실행
//프로미스 : 실행은 바로 하되 결괏값은 나중에 받는 객체. 결괏값은 실행 완료 후 then이나 catch 메서드를 통해 받음.
// 즉 new Promise라는 것의 실행은 바로 되지만! 결괏값은 Then.을 붙였을 때 받게 됨.
// callback지옥 대신 Then속에서 처리를 하고, 그 결과값을 return하고 그 다음 then을 실행함으로써 callback과 달리 깊이가 달라지지 않음.
http모듈의 필요성 → http 서버가 있어야 웹 브라우저의 요청을 처리 가능
http.createServer메서드에 콜백함수를 등록시켜놓으면, 요청이 들어올 때마다 콜백함수가 실행됨.
http.listen ⇒ 8080포트에서 listen. 8080포트로 접속하면 listening이벤트가 발생.
server⇒http.createServer 객체를 저장해놓은 변수
server.on(이벤트명, 이벤트에 따라 ㅎ실행시킬 콜백함수) 로 실행시켜주면 됨.
서버 요청 ⇒ 주소를 통해 요청의 내용 표현
요청의 내용이 주소를 통해 표현되므로 서버가 이해하기 쉬운 주소를 사용하는 것이 좋음.
REST==REpresentational State Transfer. 서버의 자원을 정의하고 자원에 대한 주소를 지정하는 방법을 가르킴. REST API의 규칙
클라이언트에서 보내는 요청 ⇒ 누가 요청을 보내는지 모름.
로그인을 구현하려면 쿠키와 세션에 대해 알고 있어야 함.
웹 사이트에 방문, 새로고침시 로그아웃이 되지 않는 것= > 클라이언트가 서버에 사용자가 누구인지를 지속적으로 알려주고 있는 중.
쿠키 : 서버는 요청에 대한 응답을 할 때 쿠키를 함께 보냄. 쿠키는 유효 기간 있음. name=zerocho와 같이 단순한 '키-값'의 쌍임. 서버로부터 큌가 오면 웹 브라우저는 쿠키를 저장해두었다가 다음 요청할 때마다 쿠키를 동봉해서 보냄. 즉, 쿠키를 통해 브라우저에서 오는 요청이 누구한테서 오는 건지 구분하는 것임.
쿠키는 요청의 헤더에 담겨 전송됨.
const http=require('http')
http.createServer((req,res)=>{
console.log(req.url, req.headers.cookie);
res.writeHead(200,{'Set-Cookie':'mycookie=test'}
//Set-Cookie헤더를 통해 쿠키를 지정함.
res.end('Hello Cookie')
}).listen(8083,()=>{console.log('8083포트에서 서버 대기 중')}
서버에 사용자 정보를 저장하고 클라이언트와는 세션 아이디로만 소통.
그 세션 아이디를 쿠키로 전송하고 주고 받는 게 일반적.
https : 웹 서버에 SSL 암호화 추가. https는 인증서가 필요하징.
https createserver할때는 도메인 인증서, 상위 인증서가 필요함. 443포트
cluster 모듈 : 기본적으로 싱글 프로세스로 동작하는 노드가 CPU코어를 모두 사용할 수 있게 해주는 모듈. 포트를 공유하는 노드 프로세스 여러 개 두는 것도 가능.
멀티 프로세스 == 메모리 공유는 안 됨. 그러므로 메모리에 세션 정보를 저장했을 때 문제가 생길 숭 ㅣㅆ음
morgan
static
app.use('요청 경로', express.static('실제 경로');
app.use('/', express.static(path.join(__dirname,'public')))
// /로 자원 요청시 현재 directory의 public에 있는 자원을 static하게 제공.
cookie-parser
app.use(cookieParser(비밀키));
body-parser : express ≥ 4.16.0 부터 body-parser내장해서 나오기 때문에 따로 import할 필요X
app.use(express.json())
app.use(express.urlencoded({extended:false}); // url_encoded = 주소 형식으로 데이터를 보내는 방식
//express body-parser. json, url-encoded형식일 경우.
const bodyParser=reqruire('body-parser');
app.user(bodyParser.raw());//요청의 본문이 버퍼 데이터일 경우
app.user(bodyParser.text());//요청의 본문이 텍스트일 경우
express-session
6840
app.use(session({
}));
multer : 파일 업로드 관련. 좀 어려움.
Create
db."collectionname".save({data~~~}
Read
db."collectionname".find({"도큐먼트 내용들~~~"});
//find({})는 해당 콜렉션 내의 모든 도큐먼트를 조회.
//특정 필드만 조회하고 싶다면 조회하고 싶은 필드는 "key":1,
//조회하고 싶지 않은 필드는 "key":0으로
db."collectionname".find({},{_id:0, name:1, married:1 })
//이러면 모든 도큐먼트에서 name,, married 필드만 가져옴
모든 도큐먼트 조회하고 싶지않다면 맨 앞 파라미터에 조건을 넣어주면 되겠쥬.
Update
db."collectionname".update({업데이트하려는 도큐먼트를 특정할 수 있는 조건},
{$set:{comment : "코멘트 필드를 이 멘트로 업데이트합니다."}});
db."collectionname".remove({name:'nero'})//{}안에 삭제할 도큐먼트 조건을 넣어주면 됨