터미널에서 ctrl + c -> 빠져나오기
01.js
const http = require('http');// 모듈을 현재 파일에 연결
const hostname = '127.0.0.1'; // 서버
const port = 3000;// 포트
const server = http.createServer((req, res) => {// 요청, 응답
res.statusCode = 200;// 응답상태 정상코드 200
res.setHeader('Content-Type', 'text/plain');// 응답을 받을 때 파일의 방식
res.end('Hello World');// 응답 받는 결과
});
server.listen(port, hostname, () => { // 서버에서 파일을 실행했을 때 클라이언트에게 상태를 전달하는 부분
console.log(`Server running at http://${hostname}:${port}/`);
});
FileSystem 모듈
* 동기와 비동기
프로그램이 동작하는 상태에서 완전히 해당 내용을 끝내고 다음으로 제어를 넘기는 방식을 동기식,
동작이 끝나지 않은 상태에서도 제어권을 넘긴 후 프로그램을 계속 진행하면 비동기식이라고 합니다.
예외 처리(Exception)
프로그램이 실행되고 있는 런타임시에 에러가 발생할 경우 처리할 수 있는 프로그램 구간을 의미합니다
try {
예외 상황이 발생할 수 있는 문장
....
}catch(e){
예외 상황이 발생했을 경우 처리할 문장(e는 Exception 객체)
}finally{
예외 상황이 발생하거나 발생하지 않아도 무조건 실행될 문장(생략가능)
}
이벤트 루프(Event Loop)
node.js는 서버가 가동되면 변수들을 초기화하고 함수를 선언하고 이벤트가 발생할 때까지 기다립니다.
이벤트가 감지되었을 때 call back 함수를 호출합니다.
02-0.js
const fs = require('fs'); //파일을 다루는 모듈을 연결
fs.readFile('text1.txt','utf-8',(err,data) => {//비동기식
if(err){
console.log(err);
}else{
console.log(`비동기식으로 읽음:${data}`)
}
});
const text = fs.readFileSync('text1.txt','utf-8');//동기식
console.log(`동기식으로 읽음:${text}`);
02-1.js
const fs = require('fs'); //파일을 다루는 모듈을 연결
const data = "Hello Node.js!";
//text2.txt
fs.writeFile('text2-11.txt',data,'utf-8',(err) => { // 파일을 만듦
if(err){
console.log('에러발생');
}else{
console.log('저장완료/비동기식');
}
});
fs.writeFileSync('text3.txt',data,'utf-8');
console.log('저장완료/동기식');
02-2.js
const fs = require('fs'); //파일을 다루는 모듈을 연결
//비동기 처리는 예외처리를 할 필요가 없다.
fs.readFile('text11.txt','utf-8',(err, data) => {
if(err){
console.log('에러발생/비동기')
}else{
console.log(data);
}
});
try {
const text = fs.readFileSync('text12.txt','utf-8');
console.log(`동기식으로 읽음 ${text}`)
} catch (e) {
console.log(`에러발생/동기식`);
}
console.log(`프로그램 종료`);
03-0.js
const http = require('http');
http.createServer((req,res) => {
res.writeHead(200,{'content-type':'text/html'});
res.end('<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>모듈 테스트</title></head><body style="background-color : deepskyblue;"><h2>http 모듈 테스트</h2><p>처음으로 실행하는 node.js http 서버</p></body></html>');
}).listen(3000, () => {
console.log('서버 실행중....');
});
test.html / 03-1.js
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>http 모듈 테스트</title>
</head>
<body style="background-color: blueviolet;">
<h2>모듈테스트</h2>
<p>처음으로 실행하는 Node.js http서버</p>
</body>
</html>
const http = require('http');
const fs = require('fs');
http.createServer((req, res) => {
fs.readFile('test.html',(err,data)=>{
if(err){
console.log(err);
}else{
res.writeHead(200, {'content-type':'text/html'});
res.end(data);
}
})
}).listen(3000, () => {
console.log('서버 실행중....')
});
03-2.js
const http = require('http');
const fs = require('fs');
//이미지
http.createServer((req, res) => {
fs.readFile('node.png', (err, data) => {
if(err){
console.log(err);
}else{
res.writeHead(200,{'content-type' : 'image/png'});
res.end(data);
}
});
}).listen(3000,() => {
console.log('이미지 서버 실행중...')
});
// 음악 파일
http.createServer((req, res)=>{
fs.readFile('sunny.mp3', (err, data) => {
if(err){
console.log(err);
}else{
res.writeHead(200,{'content-type' : 'audio/mp3'});
res.end(data);
}
});
}).listen(3001,() => {
console.log('사운드 서버 실행중...')
});
events
04.js
const event = require('events');
//이벤트 관련 메소드를 사용할 수 있는 EventEmitter 객체를 만듭니다.
const eventEmitter = new event.EventEmitter();
const connectionHandle = function(){ // 3
console.log('연결성공');
eventEmitter.emit('data_received'); //다시 이벤트가 발생 4
}
//connection 이벤트와 connectionHandler 핸들러와 연결 - 함수 연결 2
eventEmitter.on('connection', connectionHandle)
//data_receive 이벤트와 익명함수와 연결 5
eventEmitter.on('data_received',() => {
console.log('데이터수신');
});
eventEmitter.emit('connection'); // 이벤트를 발생 1
시스템 이벤트
process 객체는 노드에서 항상 사용할 수 있는 객체입니다.
on()과 emit() 메소드는 객체를 생성하거나 모듈을 가져오지 않아도 바로 사용할 수 있습니다.
on() 메소드를 호출하면서 이벤트 이름을 exit로 지정하면 내부적으로 프로세스가 끝날 때를 알 수 있습니다.
05.js
process.on('exit',() => {
console.log('exit 이벤트 발생!');
});
setTimeout(() => {
console.log('3초 후 시스템 종료');
process.exit;
}, 3000);
06-0.js
const express = require('express');
const app = express();
const port = 3000;
//┌익스프레스 메소드 들어감 set,get...
app.get('/',(req, res) => {
res.writeHead('200',{'content-type':'text/html;charset=utf-8'});
res.end('<h2>익스프레스 서버에서 응답한 메세지 입니다.</h2>');
});
app.listen(port, () => {
console.log(`${port}포트로 서버 실행 중...`);
});
06-1.js
const express = require('express');
const app = express();
const port = 3000;
//┌익스프레스 메소드 들어감 set,get...
app.get('/',(req, res) => {
res.writeHead('200',{'content-type':'text/html;charset=utf-8'});
res.end('<h2>익스프레스 서버 테스트</h2>');
});
app.listen(port, () => {
console.log(`${port}포트로 서버 실행 중...`);
});
06-2.js
const express = require('express');
const app = express();
const port = 3000;
//┌익스프레스 메소드 들어감 set,get...
app.get('/', (req, res) => {
console.log('첫번째 미드웨어 실행');
res.redirect('http://www.naver.com')
});
app.listen(port, () => {
console.log(`${port}포트로 서버 실행 중...`);
});
06-3.js
const express = require('express');
const app = express();
const port = 3000;
app.use((req, res) => {
console.log('첫번째 미들웨어 실행');
console.dir(req.header)
const userAgent = req.header('User-Agent');
console.log(userAgent);
// http://localhost:3000/?userid=apple
const paramName = req.query.userid; //get방식의 변수값을 가져옴
console.log(paramName);
});
app.listen(port,() => {
console.log(`${port}포트로 서버 실행중...`);
});
text 정리
FileSystem 모듈
파일처리와 관련된 모듈입니다.
node.js에서 가장 중요하고 기초가 되는 모듈입니다.
메소드
readFile() : 파일을 비동기적으로 읽습니다.
readFileSync() : 파일을 동기적으로 읽습니다.
writeFile() : 파일을 비동기적으로 씁니다.
writeFileSync() : 파일을 동기적으로 씁니다.
* 동기와 비동기
프로그램이 동작하는 상태에서 완전히 해당 내용을 끝내고 다음으로 제어를 넘기는 방식을 동기식,
동작이 끝나지 않은 상태에서도 제어권을 넘긴 후 프로그램을 계속 진행하면 비동기식이라고 합니다.
예외 처리(Exception)
프로그램이 실행되고 있는 런타임시에 에러가 발생할 경우 처리할 수 있는 프로그램 구간을 의미합니다
try {
예외 상황이 발생할 수 있는 문장
....
....
}catch(e){
예외 상황이 발생했을 경우 처리할 문장(e는 Exception 객체)
}finally{
예외 상황이 발생하거나 발생하지 않아도 무조건 실행될 문장(생략가능)
}
이벤트 루프(Event Loop)
node.js는 서버가 가동되면 변수들을 초기화하고 함수를 선언하고 이벤트가 발생할 때까지 기다립니다.
이벤트가 감지되었을 때 call back 함수를 호출합니다.
1. http 모듈
node.js에서 가장 기본적이고 중요한 서버 모듈입니다.
HTTP 웹 서버를 생성하는 것과 관련된 모든 기능을 담당합니다.
메소드
listen() : 서버를 실행하고 클라이언트를 기다립니다.
close() : 서버를 종료합니다.
2. request 객체
클라이언트가 서버에게 전달하는 메세지(정보)를 담는 객체입니다.
속성
method : 클라이언트 요청 방식을 나타냅니다. (GET, POST)
url : 클라이언트가 요청한 URL을 나타냅니다.
3. response 객체
서버에서 클라이언트로 응답 메세지를 전송시켜주는 객체입니다.
메소드
writeHead() : 응답 헤더를 작성합니다.
end() : 응답 본문을 작성합니다.
MIME 형식
text/plain : 일반적인 text 파일
text/html : html 형식 파일
text/css : css 형식 파일
text/xml : xml 형식 파일
image/jpeg : jpeg 이미지 파일
image/png : png 이미지 파일
video/mpeg : mpeg 동영상 파일
audio/mp3 : mp3 음악 파일
...
events
이벤트 위주의 프로그램을 작성할 때 사용하는 모듈입니다.
메소드
on() : 지정한 이벤트의 리스너를 추가합니다.
once() : 지정한 이벤트의 리스너를 추가하지만 한번 실행 이후 자동 제거됩니다.
removelistener() : 지정한 이벤트에 대한 리스너를 제거합니다.
emit() : 지정한 이벤트를 발생시킵니다.
시스템 이벤트
process 객체는 노드에서 항상 사용할 수 있는 객체입니다.
on()과 emit() 메소드는 객체를 생성하거나 모듈을 가져오지 않아도 바로 사용할 수 있습니다.
on() 메소드를 호출하면서 이벤트 이름을 exit로 지정하면 내부적으로 프로세스가 끝날 때를 알 수 있습니다.
익스프레스 모듈
http 모듈만 사용해서 웹 서버를 구성하면 직접 많은 기능을 개발해야 합니다.
이 문제를 해결하기 위해 만들어진 모듈이 익스프레스입니다.
익스프레스 모듈을 사용하면 간단한 코드로 웹 서버의 기능을 대부분 구현할 수 있고,
미들웨어와 라우터를 사용하여 편리하게 웹 서버를 구성할 수 있습니다.
메소드
use() : 미들웨어 함수를 사용합니다.
get() : get으로 사용자 정보를 전달 받습니다.
set() : 서버 설정을 위한 속성을 설정합니다.
redirect() : 웹 페이지의 경로를 강제로 이동시킵니다.
send() : 클라이언트에 응답 데이터를 보냅니다.
전달할 수 있는 데이터는 html, buffer, json, json 배열.. 등입니다.
header() : 헤더를 확인합니다.
[package 설치하기]
npm install 모듈명(npm i 모듈명)
npm i express
package 복원하기
npm install
'코리아 IT아카데미 > node.js~~~' 카테고리의 다른 글
2022_0126 | node ejs, jade, remail(0124) (0) | 2022.01.26 |
---|---|
2022_0124 | 0119와 내용 중복 (0) | 2022.01.26 |
2022_0119 | 미들웨어 실행, postman, Nodemon, Router 미들웨어, Router 객체 생성 (0) | 2022.01.26 |
2022_0114 | 노드 오류와 예외처리 (0) | 2022.01.25 |
2022_0112 | node 기초 (0) | 2022.01.25 |