Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
29 | 30 | 31 |
Tags
- 정규식 활용
- c3 초
- telegraf
- python os
- 정규식 컴파일
- linux시간으로 변경
- 1697
- 정규식 문자열 출력
- selinux port 등록
- centos pyhon 설치
- subporcess path
- influxdb 설치
- c3 step graph
- c++ 정규식
- c3 second
- gcc 업데이트
- python subprocess
- grafana dashboard
- InfluxDB
- g++ 업데이트
- c3 축 없애기
- snmp
- gcc regex
- snmp test
- 백준
- c3 축 가리기
- CentOS7
- python popen
- semanage
- regex_search
Archives
- Today
- Total
리셋 되지 말자
글수정-수정링크 생성 본문
templateHTML 함수 수정
홈에서는 update링크가 보이지 않도록하고, 나머지 페이지에서는 보이도록 수정
function templateHTML(title, list, body, control) {
return `
<!doctype html>
<html>
<head>
<title>WEB1 - ${title}</title>
<meta charset="utf-8">
</head>
<body>
<h1><a href="/">WEB2</a></h1>
${list}
${control}
<h2>${title}</h2>
${body}
</body>
</html>
`;
}
- main.js
var http = require('http');
var fs = require('fs');
var url = require('url'); // url 모듈을 사용한다
var qs = require('querystring');
function templateFiles(filelist) {
var list = '<ul>';
for (var i = 0; i < filelist.length; i++) {
list = list + `<li><a href="/?id=${filelist[i]}">${filelist[i]}</a></li>`;
}
list = list + '</ul>';
return list;
}
function templateHTML(title, list, body, control) {
return `
<!doctype html>
<html>
<head>
<title>WEB1 - ${title}</title>
<meta charset="utf-8">
</head>
<body>
<h1><a href="/">WEB2</a></h1>
${list}
${control}
<h2>${title}</h2>
${body}
</body>
</html>
`;
}
// request = 요청할 때 웹브라우저가 보낸 정보, response = 응답할 때 우리가 웹브라우저에게 전송할 정보
var app = http.createServer(function (request, response) {
var _url = request.url;
var queryData = url.parse(request.url, true).query;
var pathname = url.parse(_url, true).pathname;
console.log(pathname);
// 루트 디렉토리 (/)로부터 존재하는 페이지를 요청하면 페이지 표시
if (pathname === '/') {
fs.readFile('data/' + queryData.id, 'utf8', function (err, description) {
var title = queryData.id;
if (queryData.id === undefined) { // 없는 값을 호출하려고 하면 javascript는 undefined라고 한다.(약속)
title = 'Welcome';
description = 'Hello, Node.js';
fs.readdir('./data', function (error, filelist) {
var list = templateFiles(filelist);
var template = templateHTML(title, list,
`<p>${description}</p>`,
`<a href="/create">create</a>`
);
//response.end(fs.readFileSync(__dirname + url));
response.writeHead(200); // 200을 전송하면, 파일을 잘 전송했다고 하는 약속
response.end(template);
});
}else{
fs.readdir('./data', function (error, filelist) {
var list = templateFiles(filelist);
var template = templateHTML(title, list,
`<p>${description}</p>`,
`<a href="/create">create</a> <a href="/update">update</a>`
);
//response.end(fs.readFileSync(__dirname + url));
response.writeHead(200); // 200을 전송하면, 파일을 잘 전송했다고 하는 약속
response.end(template);
});
}
});
} else if (pathname === '/create') {
fs.readdir('./data', function (error, filelist) {
//response.end(fs.readFileSync(__dirname + url));
var title = 'WEB- create';
var list = templateFiles(filelist);
var template = templateHTML(title, list, `
<form action="http://localhost:80/create_process" method="POST">
<p><input type="text" name="title" placeholder="title"></p>
<p>
<textarea name="description" placeholder="description"></textarea>
</p>
<p>
<input type="submit">
</p>
</form>
`,
' ');
//response.end(fs.readFileSync(__dirname + url));
response.writeHead(200); // 200을 전송하면, 파일을 잘 전송했다고 하는 약속
response.end(template);
});
} else if(pathname === '/create_process'){
var body='';
//POST 방식으로 데이터를 보낼 때, 데이터가 한번에 너무 많으면, 특정한 양(조각)을 수신할 때마다 서버는 콜백 함수를 호출하도록 약속되어 있다.
request.on('data', function(data){
body=body+data; // 콜백이 실행될 때마다 데이터를 추가
if(body.length > 1e6) request.connection.destroy(); // 데이터가 너~무 많으면 연결을 강제로 종료
});
//Data가 조각 조각 들어오다가 더이상 데이터가 않오면 이게 실행되고, 콜백 함수가 실행됨
request.on('end', function(){
//정보를 qs 모듈로 post라는 객체로 객체화
var post = qs.parse(body); // 지금까지 저장한 body 데이터를 querystring 모듈의 parse를 사용하면 post데이터의 post 정보가 들어있다.
var title = post.title;
var description = post.description;
// data 디렉토리에 title이름으로 된 description 내용의 파일 생성
fs.writeFile(`data/${title}`, description, 'utf8', function(err){
// writehead의 200은 성공했다는 뜻, 302는 페이지를 다른곳으로 redirection하라는 뜻
response.writeHead(302, {Location: `/?id=${title}`});
response.end();
});
});
} else { // 없는 페이지를 요청하면 404 에러
response.writeHead(404);
response.end('Not found');
}
});
app.listen(80);
- 홈
- 글 선택
- create
- update
update 구현 시작
update 클릭시, /update 경로로 이동하는데 이때, 어떤 글을 수정하는지 알게 하기 위해서 /update?id='이름' 즉 query string을 이용해서 서버에서 어떤 글인지 알도록 한다.
`<a href="/create">create</a> <a href="/update/?id=${title}">update</a>`
update클릭 시, query string에 title을 같이 전송하도록 수정한다.
글을 누르고 update를 클릭하면 위처럼 id가 같이 전송되는걸 확인할 수 있다.
'NodeJS > 생활코딩' 카테고리의 다른 글
글수정-수정된 내용 저장 (0) | 2020.09.11 |
---|---|
글수정-수정할 정보 전송 (0) | 2020.09.10 |
파일생성과 redirection (0) | 2020.09.10 |
POSt 방식으로 전송된 데이터 받기 (0) | 2020.09.10 |
글생성 UI 만들기 (0) | 2020.09.10 |
Comments