티스토리 뷰
728x90
반응형
응답을 보내는 부분과 서버에 연결하는 부분 추가
이벤트 리스너 사용
//웹서버 켜기
const http = require('http');
//req:요청 res:응답
const server = http.createServer((req, res) => {
// 여기에 어떻게 응답할 지 적어줍니다.
res.writeHead(200,{'Content-Type' : 'text/html; charset=utf-8'})
//콘텐츠 타입 html 텍스트 /한글
res.write('<h1>Hello Node! hahahahahahaha한글 이승민</h1>');
res.end('<p>Hello Server!</p>');
})
//서버를 킨다
// .listen(3000, () => {
// console.log('3000번 포트에서 서버 대기중입니다!');
// });
server.listen(3000)//포트넘버
//이벤트 리스너 방식
server.on('listening',()=>{
console.log('3000번 포트에서 실행하고있음');
})
server.on('err',(err)=>{
console.error(err);
})
내부 아이피 (집 공유기)
> index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Node.js 웹 서버</title>
</head>
<body>
<h1>Node.js 웹 서버</h1>
<p>만들 준비되셨나요?</p>
</body>
</html>
> httphtml.js
const http = require('http')
const fs = require('fs').promises
const server = http.createServer(async (req, res) => {
const data = await fs.readFile('./index.html')
res.writeHead(200,{'Content-Type' : 'text/html; charset=utf-8'})
res.end(data)
})
server.listen(3000)
server.on('listening',()=>{
console.log('3000번 포트에서 서버 대기중입니다!');
})
[에러 핸들링(예외처리)]
const http = require('http')
const fs = require('fs').promises
const server = http.createServer(async (req, res) => {
try{
throw new Error('에러메시지 : 표시할 수 없는 화면입니다.')
const data = await fs.readFile('./index.html')
res.writeHead(200,{'Content-Type' : 'text/html; charset=utf-8'})
res.end(data)
} catch(err){
console.error(err);
res.writeHead(500,{'Content-Type' : 'text/html; charset=utf-8'})
//500응답코드
res.end(`<p>${err.message}</p>`)
}
})
server.listen(3000)
server.on('listening',()=>{
console.log('3000번 포트에서 서버 대기중입니다!');
})
[REST란?]
자기 할 만만 하고 끊는 통신(HTTP) 방식 < 클라이언트(모바일,웹,다른서버)↔node.js 서버 >
요청 메서드 GET , POST , PUT , PATCH , DELETE , OPTIONS
*GET : 가져오기
*POST : 데이터를 쓰고 그것을 서버에 보낼 때
PUT(다변경) , *PATCH(일부분) : db에 저장된 정보 수정
*DELETE : 서버의 자원 삭제(회원 탈퇴)
OPTIONS : 요청하기 전에 통신 옵션을 설명
async 사용
const http = require('http');
const fs = require('fs').promises;
const users = {};
//#req 클라이언트의 요청 들어옴# #res 서버가 클라이언트한테 반환할 것 #
const server = http.createServer(async (req, res) => {
try{
if(req.method === 'GET'){
if(req.url ==='/'){
const data = await fs.readFile('./restFront.html')//then의 파라미터값. await에 담긴다
res.writeHead(200,{'Content-Type': 'text/html; charset=utf-8'})
return res.end(data)// 리턴을 해야 분기처리가 끝난다
} else if (req.url === '/about'){
const data = await fs.readFile('./about.html')//then의 파라미터값. await에 담긴다
res.writeHead(200,{'Content-Type': 'text/html; charset=utf-8'})
return res.end(data)// 리턴을 해야 분기처리가 끝난다
} else if (req.url ==='/users'){
res.writeHead(200,{'Content-Type': 'application/json; charset=utf-8'})
return res.end(JSON.stringify(users))
}
try{
const data = await fs.readFile(`./${req.url}`)
return res.end(data)
}catch(err){
console.error(err);
}
}
else if (req.method === 'POST'){
if(req.url === '/users'){
let body = ''
req.on('data',(data)=>{
body += data
})
return req.on('end',()=>{
console.log('POST body:', body)
const { name } = JSON.parse(body)
const id = Date.now() //1245463453
users[id] = name;
console.log(users);
res.writeHead(201,{'Content-Type': 'text/plain; charset=utf-8'})
res.end('OK')
})
}
} else if (req.method ==='PUT'){
if(req.url.startsWith('/users/')){
const key = req.url.split('/')[2]
// console.log(key);
let body = ''
req.on('data',(data)=>{
body += data
})
return req.on('end',()=>{
console.log('put본문:',body);
users[key]= JSON.parse(body).name
res.writeHead(200,{'Content-Tyepe': 'text/plain; charset=utf-8'})
res.end('ok')
})
}
} else if (req.method === 'DELETE'){
console.log(req.url);
if(req.url.startsWith('/users/')){
const key = req.url.split('/')[2]
delete users[key]
//res.writeHead(200,{'Content=Type': 'text/plain; charset=utf-8'})
return res.end('ok')
}
}
}catch(err){
console.error(err);
res.writeHead(500,{'Content-Type': 'text/plain; charset = utf-8'})
res.end(err.message)
}
})
server.listen(3002)
server.on('listening',()=>{
console.log('3002번 포트에서 서버 대기중입니다!');
})
server.on('err',()=>{
console.error(err);
})
[cookie /session]
//cokie
const http = require('http')
const server = http.createServer((req,res)=>{
console.log(req.url,res.headersSent.cookie);
res.writeHead(200,{'Set-Cookie': 'mycookie=test'})
res.end('hello cookie')
})
server.listen(3000)
server.on('listening',()=>{
console.log('3000포트연결');
})
server.on('error',(err)=>{
console.error(err);
})
//cokie
const http = require('http')
const fs =require('fs')
const url = require('url')
const qs = require('querystring')
const parseCookie =(cookie = '')=>cookie//쿠키를 배열로 분해해서 쓰려고
.split(';')
.map(v=>v.split('='))
.reduce((acc,[k,v])=> {
acc[k.trim()]=decodeURIComponent(v) // trim 공백을 지운다 . v를 디코드한다
return acc
},{})
const server = http.createServer(async(req,res)=>{
//const cookie =req.headers.cookie //출력 : mycookie=test; name=lsm
const cookie = parseCookie(req.headers.cookie) //출력: [ 'mycookie', 'test', name: 'lsm' ]
console.log(cookie);
const {name}=cookie //구조분해할당
const expires = new Date() //시간을 설정할거야
expires.setMinutes(expires.getMinutes()+1)//분 설정할거야:: 현재시간ㅂ터 +1분까지
res.writeHead(302,{Location : '/','Set-Cookie': `name=${encodeURIComponent(name)}; Expires=${expires.toGMTString()}; httpOnly; path=/`})
//옵션 추가 .location
//res.end(`success${name}`) // server에 보낸다 웹에 글자 써진다.
res.end()
})
server.listen(3000)
server.on('listening',()=>{
console.log('3000포트연결');
})
server.on('error',(err)=>{
console.error(err);
})
session : 개인정보 쿠키에 노출 안되게
서버는 알고, 클라이언트에서는 안 보이고.
보통 이렇게 사용 안 함. 보안에 취약하고 정보 날아갈 수 있다. DB 필요하다
728x90
반응형
'Web > Backend_node.js기초' 카테고리의 다른 글
Express : 라우터 관리 (0) | 2022.02.07 |
---|---|
Node.js_Express 모듈 / 미들웨어 (0) | 2022.02.04 |
Node.js _ 노드 내장 객체 / 노드 내장 모듈 (0) | 2022.02.04 |
Node.js_시작 . (0) | 2022.02.04 |
AJAX_axios 통신 라이브러리 : 웹 앱 (0) | 2022.02.04 |
250x250
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- RNN
- three.js
- TouchDesigner
- DeepLeaning
- AI
- MQTT
- Express
- imgtoimg
- VR
- 유니티
- Arduino
- colab
- Java
- emotive eeg
- Unity
- 라즈베리파이
- opencv
- motor controll
- CNC
- sequelize
- unity 360
- oculuspro
- node.js
- Python
- docker
- houdini
- 유니티플러그인
- 후디니
- Midjourney
- ardity
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함
반응형