TIL 쓰고나서
게시글 delete 확인하고
로그인 파트를 읽는데
로그인 파트를 하면서 mySQL DB간 관계 정의 파트 보다가
보는 걸로는 이해가 바로 안 되어서 실습해보고 나니
로그인 파트는 또 passport 모듈을 쓰니까
그냥 슥 보는 걸로는 이해가 잘 안 되어서
해보다가...
그치만 별로 못한게
낮에 팀원분들에 관한 협의...기타 등등...하느라고
낮에는 그걸로 시간이 다 가고 저녁엔 진이 빠져서 일찍 퇴근했음
const MongoStore = require('connect-mongo')(session);
app.use(session({
secret: 'your-secret-key',
resave: false,
saveUninitialized: true,
store: new MongoStore({ mongooseConnection: mongoose.connection }) // MongoDB에 세션을 저장
}));
후자의 mongoose.connection은 따로 연결을 해야함.
const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/my_database', {
useNewUrlParser: true,
useUnifiedTopology: true
});
const db = mongoose.connection;
collection의 이름을 따로 짓고 싶다면 store 옵션의 키값에 설정한다.
store: new MongoStore({
mongooseConnection: mongoose.connection,
collection: 'my_sessions' // 컬렉션 이름 설정
})
관계 DB 공부시 확인한 것.
CREATE TABLE 테이블이름 (
컬럼이름 데이터타입,
외래키컬럼이름 데이터타입,
CONSTRAINT 제약조건이름 FOREIGN KEY (외래키컬럼이름) REFERENCES 참조테이블이름(참조컬럼이름)
);
즉 외래키컬럼 자체를 한번 선언하고 대개 제약조건이름, 외래키컬럼 이름을 일치해서 쓴 뒤, 참조테이블 이름과 참조 컬럼을 씀. ex) User(id) 같이.
app.use(session({
resave: false,
saveUninitialized: false,
secret: process.env.COOKIE_SECRET,
cookie: {
httpOnly: true,
secure: false,
},
}));
resave는 수정사항이 없어도 자동 저장할지, saveUninitialized는 초기화되지 않은 세션을 저장할지, 인데, 보통 보안 관련해서 세션 생성 허가를 받기전까지는 초기화 되지 않은 세션을 저장하지 않아야함.
그냥 인증과 권한을 관리용으로 저장은 할수는 있음.
sequelize,
timestamps: true,
underscored: false,
modelName: 'User',
tableName: 'users',
paranoid: true,
charset: 'utf8',
collate: 'utf8_general_ci',
});
timestamps는 생성및 수정 시간이 자동 기록되고,
underscoredsms...언더바(_)임.
이걸 사용하면 대문자를 소문자로 변환하거나 단어사이 언더바를 추가함.
paranoid는 활성화하면 실제로 삭제하지 않고 삭제했다는 표시를 함.
sequelize.sync({force:false})
.then(() => {
console.log('데이터베이스 연결 성공');
})
.catch((err) => {
console.error(err);
});
sync는 동기화 시킨다는 건데, 여기서 force는 내가 만약 변경했다면
DB가 손상되더라도 반영시킬지 여부임. 대개 개발환경에서 true를 쓰고
서비스 중에는 false로 한다.
그 이후는 책의 nodebird , nodejs로
SNS만들기를 하는데, express 수준에서 controller 만들어서 관리하더라.
const { renderProfile, renderJoin, renderMain } = require('../controllers/page');
router.get('/profile', renderProfile);
router.get('/join', renderJoin);
router.get('/', renderMain);
exports.renderProfile = (req, res) => {
res.render('profile', { title: '내 정보 - NodeBird' });
};
관계성은...
db.User.belongsToMany(db.User, {
foreignKey: 'followerId',
as: 'Followings',
through: 'Follow',
})
이건 내 User 칼럼에서 followerId라는 칼럼을 만들거고
매칭되는 DB의 이름은 as로 Followings며
이 공동 모델 이름을 Follow로 한다.
(즉, 팔로잉을 찾으려면 먼저 팔로워하는 사람의 아이디를 찾아야한다..)
(몰라 난 모르겠다 반대로 쓰면 된다고는 한다.)
db.Post.belongsToMany(db.Hashtag, {through: 'PostHashtag'});
쓰다보니 궁금해서
mongoDB는 관계성을 어떤 식으로 정의하는지 지피티에게 물어봄
const BookSchema = new mongoose.Schema({
title: String,
author: { type: mongoose.Schema.Types.ObjectId, ref: 'Author' },
});
식으로 type을 명시하고 ref로 내가 정의했을 model을 ref로 가져온다음
Book.find().populate('author').exec(function(err, books) {
// books 배열은 모든 책을 포함하며 각 책의 작성자 정보가 채워진 상태입니다.
});
populate로 포함시켜서 함.
참고로 저건 단순 문자열로 쓰는게 아니라 이미 정의된 model이 임포트하고 있어야함.
const AuthorSchema = new mongoose.Schema({
name: String,
});
const Author = mongoose.model('Author', AuthorSchema);
배고프다
뭔가 말할랬는데 까먹었네
질문했던거 생각보다 다시 보니 기억을 못하고 있었음
그런 의미에서 지피티가 참 다시 복기하기 좋아
공부하기도 좋고...
사실 낮에도 공부하려했는데 끝내주게 쉬었음
늘 보는 유튜버가 신작이없음
다른 유튜버 보려했는데 인간 얼굴만 쳐다보는 유튜브는 어색하다
상황극을 잘하는 유튜버를 봤음
낮잠잠
고양이가 무거웠음
보통이면 악몽이라도 꿨을텐데
아무튼 긴장이 좀 풀렸음
그리고 팀을 짠다면
어떤 식으로 첫날을 할지
커뮤니케이션은 어떤 식으로 할지 구상함.
좀 늦게 옴
올라올까말까 하다가 올라왔음
다른분들 얘기 들으면서 TIL 쓰니
벌써 11시임..
음 자기소개만 올리고 퇴근해야지
사실 로그인과 이미지 업로드까진 공부하고
react를 볼까했는데 월 화만 남았네
아니 수요일까지 있긴 한데...