묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
안녕하세요. 7장 시퀄라이즈 M:N 질문이 있습니다!
위와 같이 시퀄라이즈를 통해 관계를 설정했습니다. Post.belongsToMany(Tag, { through: "PostTag", foreignKey: "PostId" }); Tag.belongsToMany(Post, { through: "PostTag", foreignKey: "TagId" }); 여기에서 PostTag 모델도 정의했는데 이렇게 총 시퀄라이즈를 통해 N:M 관계를 정의할 때 3개의 모델을 정의하는게 맞나요? 그리고 Post.findAll({ include:[{ model:PostTag // .. 조건들 },{ model:Tag}]}); 3개의 테이블에 접근할 때 이렇게 접근하는 게 맞을까요
-
미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
시퀄라이즈는 필수인가요?
express로 웹 서버를 배운 후 기본기를 다지기 위해 강의를 보고 있습니다. 저는 시퀄라이즈를 쓰지 않고 mysql 모듈과 createConnection을 이용하여 DB에 연결을 하였습니다. 시퀄라이즈를 적용한 구문을 보면서 생각이 들었는데 실제 실무에서 SQL을 작성하기 보다(PreparedStatement와 관계없이) 시퀄라이즈를 사용하는 사례가 더 많을까요? 저 같은 경우에 로그인 체크 과정을 다음과 같은 방식으로 진행하였는데 가독성 측면에서 user.findOne이 낫다는 생각이 문득 들어 질문드립니다!
-
미해결
시퀄라이즈 서버 댓글 에러입니다
시퀄라이즈 서버 실행후 댓글 입력이 안되고 에러가 뜹니다.
-
미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
시퀄라이즈 모델명 질문
기존의 hashtag모델을 Comment모델로 바꾸는 시도를 했는데요, Object.assign(options, _.omit(source.options, ['hooks'])); ^ TypeError: Cannot assign to read only property 'name' of function 'class Comment extends Sequelize.Model { static init(sequelize) { return super.init( { c...<omitted>... }' at Function.assign (<anonymous>) at Function.hasMany (C:\Users\DAAE\OneDrive - Chonnam National University\2021-1\Project\collusic\implement\collusic\backend\node_modules\sequelize\lib\associations\mixin.js:27:12) at Function.associate (C:\Users\DAAE\OneDrive - Chonnam National University\2021-1\Project\collusic\implement\collusic\backend\models\user.js:49:13) at Object.<anonymous> (C:\Users\DAAE\OneDrive - Chonnam National University\2021-1\Project\collusic\implement\collusic\backend\models\index.js:25:6) 이러한 에러가 나옵니다. post와 user 테이블도 바꿨었는데 hashtag모델을 바꾸니 문제가 생기네요.. 기존의 databases는 mysql에서 drop 한 상태에서 실습중입니다! //models/user.js const Sequelize = require("sequelize"); //db 테이블과 sequelize 연동을 위한 코드 module.exports = class User extends Sequelize.Model { static init(sequelize) { return super.init( { email: { type: Sequelize.STRING(40), allowNull: true, unique: true, }, nick: { type: Sequelize.STRING(15), allowNull: false, }, password: { type: Sequelize.STRING(100), allowNull: true, }, provider: { //로그인 제공자 type: Sequelize.STRING(10), allowNull: false, defaultValue: "local", }, introduce: { type: Sequelize.TEXT, allowNull: true, }, imagePath: { type: Sequelize.STRING(100), allowNull: true, }, }, { sequelize, timestamps: true, //생성일 수정일 삭제일이 기록 underscored: false, modelName: "User", tableName: "users", paranoid: true, charset: "utf8", collate: "utf8_general_ci", //한글 지원 } ); } static associate(db) { db.User.hasMany(db.Post, db.Comment, { foreignKey: "uid", targetKey: "id", }); } }; //models/post.js const Sequelize = require("sequelize"); module.exports = class Post extends Sequelize.Model { static init(sequelize) { return super.init( { title: { //id 생략. -> sequlize에서는 id가 생략될 수 있음. type: Sequelize.STRING(140), allowNull: false, }, description: { type: Sequelize.TEXT, allowNull: true, }, audioFile: { type: Sequelize.STRING(140), allowNull: false, }, state: { type: Sequelize.BOOLEAN, allowNull: false, }, field_free: { type: Sequelize.BOOLEAN, allowNull: false, }, lyrics_text: { type: Sequelize.TEXT, allowNull: true, }, genre: { type: Sequelize.STRING(140), allowNull: true, }, mood: { type: Sequelize.STRING(140), allowNull: true, }, music_field: { type: Sequelize.BOOLEAN, allowNull: true, }, lyrics_field: { type: Sequelize.BOOLEAN, allowNull: true, }, instrument_field: { type: Sequelize.BOOLEAN, allowNull: true, }, }, { sequelize, timestamps: true, underscored: false, modelName: "Post", tableName: "posts", paranoid: false, //deleted at false -> 게시글 삭제시 완전 삭제 charset: "utf8mb4", //이모티콘 collate: "utf8mb4_general_ci", } ); } static associate(db) { db.Post.belongsTo(db.User, { foreignKey: "uid", sourceKey: "id" }); db.Post.hasMany(db.Comment, { foreignKey: "pid", targetKey: "id" }); } }; //models/comment.js const Sequelize = require("sequelize"); module.exports = class Comment extends Sequelize.Model { static init(sequelize) { return super.init( { c_description: { type: Sequelize.TEXT, allowNull: false, }, c_audioFile: { type: Sequelize.STRING(140), allowNull: false, }, c_lyrics_text: { type: Sequelize.TEXT, allowNull: true, }, selected_status: { type: Sequelize.BOOLEAN, allowNull: false, }, }, { sequelize, timestamps: true, underscored: false, modelName: "Comment", tableName: "comment", paranoid: false, charset: "utf8mb4", collate: "utf8mb4_general_ci", } ); } static associate(db) { db.Comment.belongsTo(db.Post, { foreignKey: "pid", sourceKey: "id" }); db.Comment.belongsTo(db.User, { foreignKey: "uid", sourceKey: "id" }); } }; //requestid 외래키 //uid 외래키 //models/index.js const Sequelize = require("sequelize"); const env = process.env.NODE_ENV || "development"; //config.json의 development 가져오기 const config = require("../config/config")[env]; //config.json의 development 가져오기 const User = require("./user"); const Post = require("./post"); const Comment = require("./comment"); const db = {}; const sequelize = new Sequelize( config.database, config.username, config.password, config ); db.sequelize = sequelize; db.User = User; db.Post = Post; db.Comment = Comment; //사람과 게시글은 1:1관계, 게시글과 해시태그는 1:N 관계 User.init(sequelize); Post.init(sequelize); Comment.init(sequelize); User.associate(db); Post.associate(db); Comment.associate(db); module.exports = db;
-
해결됨[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
시퀄라이즈 쿼리문에 req.user값 사용법
시퀄라이즈 쿼리문에 where: { email: req.user}, 이렇게 넣고 싶은데 어떻게 사용해야하나요? 로그인 후에 req.user에 이메일이 저장되고, 이 사용자의 post를 뽑아내고 싶은 상황입니다.
-
미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
궁금한게 생겨 문의드립니다.
시퀄라이즈 테스트를 하고 있습니다. 게시물(1) : 댓글(N) 을 만들어보고 싶어서 static associate(db) { db.Reply.belongsTo(db.Post, { foreignKey: "postId", targetKey: "id", }); } static associate(db) { db.Post.hasMany(db.Reply, { foreingnkey: "postId", sourceKey: "id" }); } 이렇게 배운대로 작성한 뒤, 값을 콘솔로 찍어보니 요런 형태로 나옵니다. 1. 제가 Replies는 안 만들었는데, 자동으로 생성된건가요? 2. 클라이언트에서 이 값을 사용하고 싶다면...어떻게 호출을 해야하나요? 도와주세요 감사합니다.
-
미해결Node.js에 TypeScript 적용하기(feat. NodeBird)
시퀄라이즈 질문입니다
보통 시퀄라이즈 N:M 관계에서 through로 관계를 설정하면 자동으로 만들어지는 테이블에 제가 원하는 칼럼이 추가 가능한가요?? 아니면 그냥 N:M 관계이지만 중간테이블을 제가 생성해서 hasmany, belongs to로 관계를 설정해줘야 할까요?? 찾아봐도 잘 모르겠어서 질문 드립니다 ㅜ