https://opentutorials.org/course/3332
생활 코딩 강의를 수강하며 정리함
node.js 정리
## 서버 여는 법
var http = require('http');
var app = http.createServer(function(request,response){
var url = request.url;
if(url == '/'){
url = '/index.html';
}
if(url == '/favicon.ico'){
response.writeHead(404);
response.end();
return;
}
response.writeHead(200);
response.end(fs.readFileSync(__dirname + url));
});
app.listen(5500);
####
콘솔에 출력: console.log();
변수 : var
변수 안에 변수 : var name = 'ss'; var str = 'abc'+name+"cdf";
Template Literal : ` - 기능은 여러 줄 텍스트 작성 가능 ${안에 변수or 계산 식}
####
파일 읽기
var fs = require('fs');
fs.readfile('sample.txt', 'utf-8', function(err, data){
console.log(data);
});
file.open 기반이고 인자로 파일경로, 인코딩방법, 플래그 - default : 'r', callback함수로 에러와 data가 들어간다.
먼저 파일이 존재하는지 확인 후 읽기를 해야 오류가 발생하지 않음
response.end(template);
이 부분이 화면에 출력하는 부분이다.
readfile 안쪽에 template을 넣어서 HTML 코드를 넣는다.
이 description을 동적으로 변하는 본문에 ${description}으로 넣어서 작동시킨다.
콘솔에서 입력값 확인하기!
Not Found 구현
url의 경로를 변수로설정한다.
루트이면 기존 그대로 실행
아니면 404로 not found 출력함
홈페이지 본문 구현
2중 조건문으로 홈페이지일 경우 구분하여 구현
배열:
var = [];
push 사용가능
.length사용가능
파일 목록 읽기
var testFolder = './data';
var fs = require('fs');
fs.readdir(testFolder, function(error, filelist){
console.log(filelist);
});
ㄴㄴ
함수로 중복 제거
function f123(){
console.log(1);
console.log(2);
console.log(3);
console.log(4);
}
동기적 vs 비동기적
동기적은 직렬
비동기적은 병렬 실행이라고 생각하면 된다.
node.js의 성능 향상을 위해 비동기적 방법을 지향한다.
//js에서는 함수가 값이다. 변수다
var a = function(){
console.log('A');
}
callback()
function slowfunc(callback){
callback();
}
slowfunc(a);
함수 작업이 끝났으니 callback한다. 라는 의미
인자로 a를 넣으면
var a = function(){
console.log('A');
}
실행됨
pm2 - 서버 자동화
npm install pm2 -g
pm2 start main.js - 서버 시작
pm2 stop main.js - 서버 종료
pm2 start main.js --watch - 감시하며 시작 : 업데이트하면 서버가 자동으로 껐다 켜짐
pm2 log : 오류나 수정 내역 보여줌
form 데이터 전송하기
<form action="http://localhost:5500/process_create" method="post"> - post로 해야 url에 표시되지않고 전송가능
<input type="text" name="title">
<p>
<textarea name="description"></textarea>
</p>
<p>
<input type="submit">
</p>
</form>
post 방식으로 전달된 데이터 받기
var qs = require('querystring');
쿼리 스트링 헤더
request.on('data', function(data){
body = body + data;
});
요청 받은 데이터 받는 함수
request.on('end', function(){
var post = qs.parse(body);
var title = post.title;
var description = post.description;
});
정보 저장
파일 생성
fs.writeFile(`data/${title}`, description, 'utf8', function(err){
response.writeHead(302,{Location: `/?id=${title}`});
response.end();
})
: 302가 리다이렉션
인자는 차례대로 파일 저장 경로+ 이름, 내용, 파일 형식, callback
글 수정
<a href="/update?id=${title}">update</a>`);
주소 + ?id=title로 수정하는 목표 설정
post 방식으로 전달된 정보
var post = qs.parse(body);
var id = post.id;
var title = post.title;
var description = post.description;
fs.rename(`data/${id}`, `data/${title}`, function(error){
fs.writeFile(`data/${title}`, description, 'utf8', function(err){
response.writeHead(302,{Location: `/?id=${title}`});
response.end();
});
});
data 정보가 바뀔때 리다이렉션 방지용 서버 여는 법
pm2 start main.js --watch --ignore-watch="data/*"
삭제버튼: post로 하기 위해 form으로 구현
<form action="delete_process" method="post" onsubmit="alert(real delete?)">
<input type="hidden" name="id" value="${title}">
<input type="submit" value="delete">
</form>
삭제 기능
fs.unlink(`data/${id}`, function(error){
response.writeHead(302, {Location: `/`});
response.end();
})
photon bulid 창과 unity 내부 game씬 동기화 문제 (0) | 2022.08.16 |
---|---|
yolov5 class 한글 폰트 적용 (0) | 2022.04.09 |
CSS 정리 (0) | 2021.08.09 |
HTML 태그 정리 (0) | 2021.08.04 |
express정리 (0) | 2021.07.29 |