Node.js의 패키지 매니저와 PM2
Package : 독립적으로 실행되는 프로그램
패키미 매니저 : 생성, 설치, 업데이트, 삭제 등의 역할을 해주는 것.
NPM : Node.js를 사용 할 때 설치한 패키지 매니저.
PM2 : process manager for Node.js > 실행 중인 프로그램 (Node.js를 통해 만든 프로그램) , 우리가 만든 프로세스들을 감시하고 있다가 꺼지고 하면 다시 실행시켜주는 역할. 파일의 수정을 관찰하다가 프로그램을 껐다가 켜주는 그런 ..
npm install pm2 -g
> 설치가 실행 됨. 신기하구먼.
pm2 start first/main.js 해주니까 실행되면서
이런 화면이 떴다.
status : online이라고 되어있으면 실행 중인 상태를 의미.
pm2 monit
pm2 list
pm2 stop
pm2 log
혼란하다 혼란해.
node.js로 실행하면 오류 안나는데 pm2로 start main.js하고 실행시키니까 상태가 online은 됬는데 localhost:3000/ 으로 들어갔을 때 사이트를 연결 할 수 없다고 오류가 나면서 저런 식으로 로그가 찍혔다.
제대로 아는 상태가 아니다 보니까 황당하기만 하군.
별별 오류를 다 보고 있다. 제대로 종료가 되지 않아 node.js에서 실행시키면 address already in us 오류가 났다.
이런 경우 netstat -ano 명령어를 통해서 포트를 사용 중인 모든 프로세스를 찾고 PID를 확인한다.
오른쪽 화면의 3000번 포트 PID와 node.exe 하나 프로세스의 PID가 같은 것을 확인 할 수 있고 작업 종료를 해주었다.
아니 근데 작업을 끝내면 다른 것이 실행되는게 아닌가... 그래서 PID가 다른 것을 꺼버렸더니 둘 다 종료 되었고 다시 실행하니 해결이 되었다.
도대체 왜 저런 오류가 나는 것인가 ?
혼란하다 혼란해.
pm2의 버전 문제라는 글을 보고 버전을 내려줬더니 해결이 되었다.
pm2 -v : 버전을 확인해보니 처음에는 4.2.3 이었는데 3.2.4 버전으로 내려주라고 그래서 npm install pm2@3.2.4 -g 명령을 사용했다. 그러니까 해결.
8분짜리 강의를 30분 동안 듣게 되는 마법.
그런데 버전을 내리고도 log를 찍어보면 length 저거는 계속 뜬다. 근데 console로 로그 찍어본것도 뜬다. 아니 무슨 말이야.!
HTML - Form
누구나 웹을 통해서 데이터를 전송하고 데이터 디렉토리 안에 생성하고 싶다는 마음.
내용 넘김.
글 생성 UI 만들기
다시 또 혼란한 부분이 생겼다.
pm2의 필요성은 코드의 변화를 인지하고 자동으로 서버를 껐다가 켜준다고 설명해주셨는데 a 태그 수정 한게 반영이 되지 않았다. 혹시나해서 껐다가 키니까 반영됨. 혼란스러운 것은 node.js를 통해서 서버를 켰을 때는 리로드를 통해서 수정 사항이 반영됬었다는 사실.... 뭔데....
또 다시 시간이 흐르니 해결 되었다.
(답답해 죽어버림..)
var http = require('http');
var fs = require('fs');
var url = require('url');
function templateHTML(title, list, body) {
return `
<!doctype html>
<html>
<head>
<title>${title}</title>
<meta charset="utf-8">
</head>
<body>
<h1><a href="/">WEB</a></h1>
${list}
<a href = "/create">create</a>
${body}
</body>
</html>
`;
}
function templateList(filelist) {
var list = '<ol>';
var i = 0;
while(i < filelist.length) {
list += `<li><a href = "/?id=${filelist[i]}">${filelist[i]}</a></li>`
i += 1;
}
list += '</ol>';
return list;
}
var app = http.createServer(function(request,response){
var _url = request.url;
var queryData = url.parse(_url, true).query;
var pathName = url.parse(_url, true).pathname;
var title = queryData.id;
var template;
if(pathName === '/') {
if(title === undefined) {
fs.readdir('./data', function(error, filelist){
title = 'Welcome';
var description = 'hello node.js';
var list = templateList(filelist);
template = templateHTML(title, list, `<h2>${title}</h2><p>${description}</p>`);
response.writeHead(200);
response.end(template);
});
}else {
fs.readdir('./data', function(error, filelist){
var list = templateList(filelist);
fs.readFile(`data/${title}`, 'utf8', function(err, description) {
template = templateHTML(title, list, `<h2>${title}</h2><p>${description}</p>`);
response.writeHead(200);
response.end(template);
});
})
}
}else if(pathName === '/create'){
fs.readdir('./data', function(error, filelist){
title = 'WEB - create';
var list = templateList(filelist);
var template = templateHTML(title, list, `
<form action="http://localhost:3000/process_create" method="post">
<p><input type="text" name="title" placeholder="title" placeholder="title"></p>
<p>
<textarea name="description" placeholder="description" placeholder="description"></textarea>
</p>
<p>
<input type="submit">
</p>
</form>
`);
response.writeHead(200);
response.end(template);
});
}else {
response.writeHead(404);
response.end("Not Found");
}
});
app.listen(3000);
재미있다. 아무래도 일정 끝내고 시간 내서 하는 이게 맞는 것 같아.
'JavaScript > Node.js' 카테고리의 다른 글
Window에서 갑자기 잘 쓰던 포트가 안 열릴 때 - listen EACCES: permission denied 0.0.0.0:8443 (0) | 2022.12.09 |
---|---|
npm run dev 오류 (0) | 2020.08.13 |
생활코딩 Node.js 파일목록 알아내기 등등 (0) | 2020.04.13 |
생활코딩 Node.js 파일 이용, 콘솔 입력값 등 (0) | 2020.04.04 |
생활코딩 Node.js URL, 동적인 웹 페이지 만들기, 파일 읽기 (0) | 2020.04.03 |
댓글