ํ๋ก์ ํธ๋ฅผ ๋ง๋ค๊ธฐ ์ ํญ์ package.json์ ์ ์ผ ๋จผ์ ์์ฑํด์ผ ํ๋ค.
npm init ํน์ ์ง์ ๋ง๋ค์ด๋ ๋๋ค.
// package.json
{
"name": "nodebird",
"version": "0.0.1",
"description": "์ต์คํ๋ ์ค๋ก ๋ง๋๋ SNS ์๋น์ค",
"main": "app.js",
"scripts": {
"start": "nodemon app"
},
"author": "seol",
"license": "MIT"
}
ํ์ฌ ์ด ์ฅ์์ ์ค์ตํ๋ ๊ฒ ์ค User ๋ชจ๋ธ๊ณผ Post ๋ชจ๋ธ์ 1:N ๊ด๊ณ๋ฉฐ hasMany๋ก ์ฐ๊ฒฐ๋์ด ์๋ค.
// models/user.js
...
static associate(db) {
db.User.hasMany(db.Post);
db.User.belongsToMany(db.User, {
foreignKey: 'followingId',
as: 'Followers',
through: 'Follow',
});
db.User.belongsToMany(db.User, {
foreignKey: 'followerId',
as: 'Follwings',
through: 'Follow',
});
}
...
- ๊ฐ์ ๋ชจ๋ธ๋ผ๋ฆฌ๋ N:M ๊ด๊ณ๋ฅผ ๊ฐ์ง ์ ์์ผ๋ฉฐ, ํ๋ก์ ๊ธฐ๋ฅ์ด ๋ํ์ ์ธ N:M ๊ด๊ณ๋ค.
- ์ฌ์ฉ์ ํ ๋ช ์ด ํ๋ก์๋ฅผ ์ฌ๋ฌ ๋ช ๊ฐ์ง ์ ์๊ณ , ํ ์ฌ๋์ด ์ฌ๋ฌ ๋ช ์ ํ๋ก์ํ ์๋ ์๋ค.
- ๊ฐ์ ํ ์ด๋ธ ๊ฐ N:M ๊ด๊ณ์์๋ ๋ชจ๋ธ ์ด๋ฆ๊ณผ ์ปฌ๋ผ ์ด๋ฆ์ ๋ฐ๋ก ์ ํด์ผ ํ๋ค.
- ๊ฐ์ ํ ์ด๋ธ ๊ฐ์ N:M ๊ด๊ณ์์๋ ๊ฐ์ ๋ชจ๋ธ์ด๋ผ ๊ตฌ๋ถ๋์ง ์์ as ์ต์ ๋ ๋ฃ์ด์ผ ํ๋ค.
=> ์ฃผ์! as๋ foreignKey์ ๋ฐ๋๋๋ ๋ชจ๋ธ์ ๊ฐ๋ฆฌํจ๋ค.
- passport.initialize ๋ฏธ๋ค์จ์ด๋ ์์ฒญ(req ๊ฐ์ฒด)์ passport ์ค์ ์ ์ฌ๊ณ , passport.session ๋ฏธ๋ค์จ์ด๋ req.session ๊ฐ์ฒด์ passport ์ ๋ณด๋ฅผ ์ ์ฅํ๋ค.
- req.session ๊ฐ์ฒด๋ express-session์์ ์์ฑํ๋ ๊ฒ์ด๋ฏ๋ก passport ๋ฏธ๋ค์จ์ด๋ express-session ๋ฏธ๋ค์จ์ด๋ณด๋ค ๋ค์ ์ฐ๊ฒฐํด์ผ ํจ.
// passport ๊ด๋ จ ์ฝ๋
const passport = require('passport');
const local = require('./localStrategy');
const kakao = require('./kakaoStrategy');
const User = require('../models/user');
module.exports = () => {
passport.serializeUser((user, done) => {
done(null, user.id);
});
passport.deserializeUser((id, done) => {
User.findOne({ where: { id } })
.then(user => done(null, user))
.catch(err => done(err));
});
local();
kakao();
};
์ฝ๋์ passport.serializeUser์ passport.deserializeUser ๋ถ๋ถ์ด passport๋ฅผ ์ดํดํ๋ ํต์ฌ์ด๋ค.
serializeUser๋ ์ฌ์ฉ์ ์ ๋ณด ๊ฐ์ฒด๋ฅผ ์ธ์ ์ ์์ด๋๋ก ์ ์ฅํ๋ ๊ฒ์ด๊ณ , deserializeUser๋ ๋งค ์์ฒญ ์ ์คํ๋๋ฉฐ ์ธ์ ์ ์ ์ฅํ ์์ด๋๋ฅผ ํตํด ์ฌ์ฉ์ ์ ๋ณด ๊ฐ์ฒด๋ฅผ ๋ถ๋ฌ์ค๋ ๊ฒ์ด๋ค. ์ด ๊ณผ์ ์ ์ธ์ ์ ๋ถํ์ํ ๋ฐ์ดํฐ๋ฅผ ๋ด์๋์ง ์๊ธฐ ์ํ ๊ณผ์ ์ด๋ค.
POST: /post/img ๋ผ์ฐํฐ์์๋ ์ด๋ฏธ์ง ํ๋๋ฅผ ์ ๋ก๋๋ฐ์ ๋ค ์ด๋ฏธ์ง์ ์ ์ฅ ๊ฒฝ๋ก๋ฅผ ํด๋ผ์ด์ธํธ๋ก ์๋ตํ๋ค. static ๋ฏธ๋ค์จ์ด๊ฐ /img ๊ฒฝ๋ก์ ์ ์ ํ์ผ์ ์ ๊ณตํ๋ฏ๋ก ํด๋ผ์ด์ธํธ์์ ์ ๋ก๋ํ ์ด๋ฏธ์ง์ ์ ๊ทผ ๊ฐ๋ฅํ๋ค.
POST: /post ๋ผ์ฐํฐ๋ ๊ฒ์๊ธ ์ ๋ก๋๋ฅผ ์ฒ๋ฆฌํ๋ ๋ผ์ฐํฐ๋ค.
์๋ฒ๋ ์์ฒญ์ ์๋ตํ๋ ๊ฒ์ด ํต์ฌ ์๋ฌด์ด๋ฏ๋ก ์์ฒญ์ ์๋ฝํ๋ ๊ฑฐ์ ํ๋ ์๊ด์์ด ๋ฐ๋์ ์๋ตํด์ผ ํ๋ค. ์ด๋ ํ ๋ฒ๋ง ์๋ตํด์ผ ์๋ฌ๊ฐ ๋ฐ์ํ์ง ์๋๋ค.
๊ฐ๋ฐ ์ ์๋ฒ๋ฅผ ๋งค๋ฒ ์๋์ผ๋ก ์ฌ์์ํ์ง ์์ผ๋ ค๋ฉด nodemon์ ์ฌ์ฉํ์.
dotenv ํจํค์ง์ .env ํ์ผ๋ก ์ ์ถ๋๋ฉด ์ ๋๋ ๋น๋ฐ ํค๋ฅผ ๊ด๋ฆฌํ์.
๋ผ์ฐํฐ๋ routes ํด๋์, ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ models ํด๋์, html ํ์ผ์ views ํด๋์ ๊ตฌ๋ถํ์ฌ ์ ์ฅํ๋ฉด ๊ท๋ชจ๊ฐ ํฐ ํ๋ก์ ํธ์์๋ ๊ด๋ฆฌํ๊ธฐ ์ฝ๋ค.
๋ฐ์ดํฐ ๊ฐ ๊ด๊ณ์๋ 1:1, 1:N, N:M ๊ด๊ณ๊ฐ ์๋ค.
[Node.js] 11์ฅ ๋ ธ๋ ์๋น์ค ํ ์คํธํ๊ธฐ (0) | 2022.12.01 |
---|---|
[Node.js] 10์ฅ ์น API ์๋ฒ ๋ง๋ค๊ธฐ (0) | 2022.11.24 |
[Node.js] 8์ฅ ๋ชฝ๊ณ ๋๋น (0) | 2022.11.17 |
[Node.js] 7์ฅ MySQL (0) | 2022.11.10 |
[Node.js] 6์ฅ ์ต์คํ๋ ์ค ์น ์๋ฒ ๋ง๋ค๊ธฐ (0) | 2022.11.05 |