저장할 값을 객체로 저장하는가 배열로 저장하는가
: 객체는 유일한 key값을 가지므로 같은 key값을 가지는 객체를 저장하려하면 값이 수정된다.
-> 중복된 key값으로 저장하고 싶다면 배열 안에 객체를 넣는 방법이 효율적인 방법이다.
query string : url의 전달값(post) (ex. localhost:8082/login?name=[]/ 에서의 ? 이후의 값)
쿠키와 세션 : 쿠키는 클라이언트 측에서 가지는 정보, 세션은 서버 측에서 가지는 정보이며, 둘을 비교하여 인증 또는 인가 작업을 한다.
쿠키는 생성할 때 만료시간을 정하여 건내주며, 만료시간이 되면 쿠키는 자동으로 사라진다.
form에서 submit으로 값을 보낼때 post로 서버를 보낸다. 받을때 tag의 name 값을 key로 받아오게 된다. (==> await axios.post('form.action' , {tag_name.key}); )
원하는 메서드를 불러오고 싶을 때, ctrl+space 해주면 메서드 목록이 뜬다.
암호화된 http 프로토콜로, 443포트를 기본으로 한다.
서버에 접근할 때 서버에서 요구하는 인증서를 사용하여 접근이 가능하다.
1 request에 여러개의 reponse가 가능하다.
const https = require('https');
const fs = require('fs');
https.createServer({
cert: fs.readFileSync('도메인 인증서 경로'),
key: fs.readFileSync('도메인 비밀키 경로'),
ca: [
fs.readFileSync('상위 인증서 경로'),
fs.readFileSync('상위 인증서 경로'),
],
}, (req, res) => {
res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });
res.write('<h1>Hello Node!</h1>');
res.end('<p>Hello Server!</p>');
})
.listen(443, () => {
console.log('443번 포트에서 서버 대기 중입니다!');
});
코어를 하나만 사용하는 nodeJS의 환경을 보완하기 위해 사용
여분의 코어를 임의로 사용하여 서버로의 요청을 분산시키는 작업
프로젝트에서 사용하는 모듈들을 관리하는 방법
버전 이해 : (major.minor.patch) major이 수정되면 코드 전체가 수정됨 (ex. 1.0.3, 1.2.3...)
-> 코드가 전체적으로 수정되면 mojor를 꼭 수정해야함.
npm init // 터미널에 입력하면 폴더에 package.json 생성
npm i <module> // 모듈 설치하는 코드
app.set('변수명', 넣을 값) : 전역 변수 설정 방법
(ex. app.set('port', process.env.PORT || 3000);
app.get('받을 key 값', callback(req, res), errFunc) : rest API의 get요청 처리
+) get방식을 사용하여 값을 주기 위해서는 프론트와 서버에서 모두 한글 인코딩을 해주어야 하므로 post방식으로 값을 주도록 하자.
app.use((req, res, next) => {...}) : 미들웨어를 사용하는 구문이며, 모든 요청에 실행되는 구문이다. next를 사용하여 다음으로 넘어가도록 한다.
+) 앞에 '/key'가 있다면 key에 해당되는 요청만 받아준다. 그러나, '/'이면 모든 요청에 대해 callback을 실행한다.
// 에러처리 미들웨어 형식
app.use((err, req, res, next)=>{ // 반드시 매개변수가 4개여야 한다.
console.log(err);
res.status(500).send(err.message);
});
router : 파일을 분할하여 처리할 때 사용한다. main에서는 복잡한 코드를 쓰면 읽기 불편하기 때문에 파일을 분할하여 사용한다.
라우팅 시에 전역 객체(global)을 사용하여 라우터들에게 값을 전달해준다.
const userRouter = require("./routes/user");
const indexRouter = require("./routes"); // 파일 경로가 생략되어 있다면 index.js를 찾는다.
global.data = { user : {} , session : {}, messages : []};
// 회원 db(user), 세션db, 채팅매세지db를 global.data에 담아준다.
npm i dotenv // install 하고
const dotenv = require("dotenv")
dotenv.config() // 모듈에 의해 폴더 내에서 설정한 .env파일의 환경변수를 불러옴
process.env.PORT // env에 저장한 PORT 값을 불러옴
cookieParser : 쿠키를 다루는 모듈. 쿠키를 정의할 때 비밀키를 넣어 보안을 높이기도 하며, 이는 req.signedCooikes 객체에 들어간다. (둘을 설정할 당시에 같은 값을 넣는 것이 중요하다.)
express-session : 세션을 다루는 모듈.
const cookieParser = require("cookie-parser");
const session = require("express-session");
app.use(cookieParser(process.env.COOKIE_SECRET));
// 쿠키 정의
app.use(
session({
resave: false,
saveUninitialized: false,
secret: process.env.COOKIE_SECRET,
cookie: {
httpOnly: true,
secure: false,
},
name: "session-cookie",
})
);
// 세션 정의
const session = await Session.create({
userId: user.id,
expires,
});
// req.session으로 조회 가능하다.
res.cookie("key", session.id, { expires });
// req.cookies.key로 값을 조회 가능하다.
express.static(path.join(__dirname, 'folder')) : folder 경로에 있는 모든 정적 파일들을 불러온다. 보통 처음에 js와 css를 가져오기 위해 사용하며, 보통 folder는 'public' 폴더에 파일들을 넣어준다.
multer : 파일을 업로드할 수 있게 만드는 모듈
+) 여러 파일을 불러오고 싶다면 html 태그에서 마지막에 multiple을 써주면 된다.
(ex. <`input type="file" name="image1" multiple/>)
const upload = multer({
storage: multer.diskStorage({
destination(req, file, done) {
done(null, "uploads/");
},
filename(req, file, done) {
const ext = path.extname(file.originalname);
done(null, path.basename(file.originalname, ext) + Date.now() + ext);
// done에서 파일 이름을 설정할 수 있음
},
}),
limits: { fileSize: 5 * 1024 * 1024 },
// 파일 크기
});