const:상수,변하지 않음
var:변수
express 기본 구문
var express = require('express')
var app = express()
const port = 3000
//route방식
app.get('/', (req, res) => {
res.send('Hello World!')
})
/*
app.get('path', callback);
app.get('/', function(req, res){ //함수로 대체 가능
return res.send('Hello World!')
});
app.get('/page', function(req, res){
return res.send('/page')
});
*/
app.listen(port, () => {
console.log(`Example app listening on port ${port}`)
})
홈페이지 구현 예문
app.get('/', function(request, response){
fs.readdir('./data', function(error, filelist){
var title = 'Welcome';
var description = 'Hello, Node.js';
var list = template.list(filelist);
var html = template.HTML(title, list,
`<h2>${title}</h2>${description}`,
`<a href="/create">create</a>`
);
response.send(html);
});
});
쿼리스트링없이 path방식 url
app.get('/page/:pageId', function(request, response){
response.send(request.params);
});
내용추가
app.get('/page/:pageId', function(request, response){ //페이지 수정
fs.readdir('./data', function(error, filelist){
var filteredId = path.parse(request.params.pageId).base;
fs.readFile(`data/${filteredId}`, 'utf8', function(err, description){
var title = request.params.pageId; // title 수정
var sanitizedTitle = sanitizeHtml(title);
var sanitizedDescription = sanitizeHtml(description, {
allowedTags:['h1']
});
var list = template.list(filelist);
var html = template.HTML(sanitizedTitle, list,
`<h2>${sanitizedTitle}</h2>${sanitizedDescription}`,
` <a href="/create">create</a>
<a href="/update?id=${sanitizedTitle}">update</a>
<form action="delete_process" method="post">
<input type="hidden" name="id" value="${sanitizedTitle}">
<input type="submit" value="delete">
</form>`
);
response.send(html);
});
});
});
form 태그 정리
// parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: false }))
app.post('/create_process', function(request, response){
// var body = '';
// 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();
// })
// });
// })
var post = request.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();
comprassion
app.use(compression());
app.get('*', function(request, response, next){
fs.readdir('./data', function(error, filelist){
request.list = filelist;
next();
});
});
순서대로 실행
next('route')시 다음 라우터 실행
app.use(express.static('public'));
추가후 이미지태그
app.use((req, res, next) => {
res.status(404).send("Sorry can't find that!")
})
app.use((err, req, res, next) => {
console.error(err.stack)
res.status(500).send('Something broke!')
}) //next(err) err에 해당
helmet 이용
const helmet = require('helmet')
app.use(helmet())
nsp 이용
기본적으로 필요한 파일과 코드를 자동으로 만들어주는 앱