λͺ¨λ°μΌμ μλμ λ±μ₯ν ν΄λΌμ΄μΈνΈμ¬μ΄λλ λλ§ Single Page Application(SPA)
SPAλ μ΅μ΄ νλ² νμ΄μ§ μ 체λ₯Ό λ‘λ©ν ν λ°μ΄ν°λ§ λ³κ²½νμ¬ μ¬μ©ν μ μλ μ ν리μΌμ΄μ
μ ν΅μ μΈ μΉ λ°©μ(SSR)μ μλ²μ¬μ΄λ λ λλ§ λ°©μμ΄λ€. μ¦, λΈλΌμ°μ μ λνλλ νν κ·Έλλ‘λ₯Ό HTMLλ‘ λ§λ€μ΄ μ 곡νκ³ , λΈλΌμ°μ λ HTMLμ νμνλ λ°©μμ΄μλ€. μμ¦μ μΉμμ μ 곡λλ μ λ³΄κ° λ§κΈ° λλ¬Έμ μ ν΅μ μΈ λ°©μμ μ±λ₯λ¬Έμ μ μ΄μλ₯Ό λ³μλ€.
ν΄λΌμ΄μΈνΈ μ¬μ΄λ λ λλ§μ μ¬μ©μμ νλμ λ°λΌ νμν λΆλΆλ§ λ€μ μ½μ΄λ€μ΄κΈ° λλ¬Έμ μλ²μΈ‘μμ λ λλ§νμ¬ μ 체 νμ΄μ§λ₯Ό λ€μ μ½μ΄λ€μ΄λ κ²λ³΄λ€ λΉ λ₯Έ μΈν°λ μ μ κΈ°λν μ μλ€. μλ²λ λ¨μ§ JSONνμΌλ§ 보λ΄μ£Όκ³ , htmlμ 그리λ μν μ μλ°μ€ν¬λ¦½νΈλ₯Ό ν΅ν΄ ν΄λΌμ΄μΈνΈ μΈ‘μμ μν
νΈλν½μ κ°μμν€κ³ , μ¬μ©μμκ² λ λμ κ²½νμ μ 곡
Philosophy
: http μλ²λ₯Ό μν μμ§λ§ κ°λ ₯ν ν΄μ μ 곡νλ νλ μμν¬
Middleware
: μ€κ° λ¨κ³ ν¨μ?
middleware next μΈμ --> λ€μ λ―Έλ€μ¨μ΄ν¨μ μ°κ²° ( μ λ¨κ³ νλ³ )
.use() λ©μλ
Router
: λΌμ°ν
μ μ΄λ€ λ€νΈμν¬ μμμ ν΅μ λ°μ΄ν°λ₯Ό λ³΄λΌ κ²½λ‘λ₯Ό μ ν
νλ κ³Όμ .
URI λ° νΉμ ν HTTP μμ² λ©μλ (GET, POST λ±)μΈ νΉμ μλν¬μΈνΈμ λν ν΄λΌμ΄μΈνΈ μμ²μ μ ν리μΌμ΄μ
μ΄ μλ΅νλ λ°©λ²μ κ²°μ νλ κ²
< μλ²λ ν΄λΌμ΄μΈνΈκ° μμ² ν μ μλλ‘ μμ²κ²½λ‘λ₯Ό λ§λ€μ΄μΌ νλ€. >
// node.js router λ°©μ
if(path === '/a'){
res.send('aa');
}else if(path === '/b'){
if(req.age < 20){
res.status(400).send('no')
}else{
res.send('b')
}
}
// express router λ°©μ
router.get('/a', (req,res) => {
res.send('aa');
})
router.get('/b', (req,res) => {
if(req.age < 20){
return res.status(400).send('no')
}
res.send('b')
})
// 기본ꡬ쑰
var express = require("express");
var app = express();
app.METHOD(PATH, HANDLER);
app.get('/', function (req, res) {
res.send('Hello World!');
});
app.post('/', function (req, res) {
res.send('Got a POST request');
});
app.put('/user', function (req, res) {
res.send('Got a PUT request at /user');
});
app.route()
: λΌμ°νΈ κ²½λ‘μ λνμ¬ μ²΄μΈ κ°λ₯ν λΌμ°νΈ νΈλ€λ¬λ₯Ό μμ±ν μ μλ€. κ²½λ‘λ ν κ³³μ μ§μ λμ΄ μμΌλ―λ‘, λͺ¨λμ λΌμ°νΈλ₯Ό μμ±νλ©΄ μ€λ³΅μ±κ³Ό κ°μνμ¬ λμμ΄ λλ€.
app.route('/book')
.get(function(req, res) {
res.send('Get a random book');
})
.post(function(req, res) {
res.send('Add a book');
})
.put(function(req, res) {
res.send('Update the book');
});
Cross Origins Resource Sharing : cross originμμ 리μμ€λ₯Ό μμ²νλ€
보μμμ μ΄μ λ‘ λΈλΌμ°μ μμ cross origin λλ©μΈ μμ²μ κΈ°λ³Έμ μΌλ‘ μ ν
const defaultCorsHeaders = {
'access-control-allow-origin' : '*',
'access-control-allow-methods': 'GET, POST, PUT, DELETE, OPTIONS',
'access-control-allow-headers': 'content-type, accept',
'access-control-max-age' : 10 //seconds
}