본문 바로가기

TIL

Mongoose-> Sequelize 셋팅 방법 정리(2021.03.27)

1. mongoose를 연결한 js에서 가져와야할 부분

goods.js

const mongoose = require("mongoose");

const GoodsSchema = new mongoose.Schema({
  name: String,
  thumbnailUrl: String,
  category: String,
  price: Number,
});
GoodsSchema.virtual("goodsId").get(function () {
  return this._id.toHexString();
});
GoodsSchema.set("toJSON", {
  virtuals: true,
});
module.exports = mongoose.model("Goods", GoodsSchema);

여기 mongoose에서 가져와야할 것은 name: string, thumbnailUrl, category: string, price:integer 

*price에 number가 아닌 integer을 사용한 이유는 mysql에서 숫자는 integer로 가능하기 때문입니다. 

 

cart.js 

const mongoose = require("mongoose");

const CartSchema = new mongoose.Schema({
  userId: String,
  goodsId: String,
  quantity: Number,
});
module.exports = mongoose.model("Cart", CartSchema);

cart.js도 마찬가지로 goodsId: string, quantity: integer로 가지고 오면 됩니다. 이때 userId는 별도로 설정을 할 것이기 때문에 포함시키지 않았습니다. 

 

2. 사용자 모델 생성 

models>user.js 코드 

npx sequelize model:generate --name User --attributes email:string,nickname:string,password:string

 

models>goods.js 코드 

npx sequelize model:generate --name Goods --attributes nickname:string,thumbnailUrl:string,category:string,price:integer

=> 간단하게 설명을 드리자면 name에는 Goods를 설정하게 되면 models에서 만들어질 때 goods.js로 만들어집니다. 그리고 attributes 안에 내용을 보면 mongoose에서 가져온 data를 그대로 넣게 되면 sequelize에 맞게 설정이 됩니다. 

 

models>Cart.js 코드 

npx sequelize model:generate --name Cart --attributes goodsId:string,quantity:integer

=> cart.js도 goods.js에 적용했던 방식과 동일합니다. 

 

파일 구성 

 

3. userId 삽입 코드 

models 안에 있는 cart.js, goods.js, user.js 안에다가 userId를 다 넣기만 하면 됩니다. 즉 user.js에 셋팅된 userId를 그대로 cart.js, goods.js에 삽입하면 됩니다. 

 userId : {
      primaryKey: true,
      type: DataTypes.INTEGER,
    },

 

migrations 안에는 create-user.js, create-goods.js, create-cart.js 안에다가 userId를 다 넣기만 하면 됩니다. 이것도 create-user.js에 셋팅된 userId를 참조하시면 됩니다. 

      userId: {
        allowNull: false,
        autoIncrement: true,
        primaryKey: true,
        type: Sequelize.INTEGER
      },

4. 테이블 생성하기 

npx sequelize db:migrate

이 코드를 넣게 되면 

database_development에 table이 생성된 것을 확인할 수 있습니다. 

 

5. 알 수 없는 문제가 발생에 대한 대처 방법

 

이 문제는 token에 password가 동일하지 않아서 발생된 문제임으로 먼저 

app.js 코드에서 router.post("/auth") 안에 

const token = jwt.sign({ userId: user.userId }, "my-password");

"my-password"라고 되어있는 부분과 middlewares folder 안에 있는 auth-middleware.js 에서 

 const { userId } = jwt.verify(tokenValue, "my-password");

jwt.verify안에 있는 "my-password" 가 동일한 지 확인해야합니다. 그것만 name을 같게 한다면 알 수 없는 문제는 해결 될 것입니다. 

'TIL' 카테고리의 다른 글

알고리즘 해설 녹화  (0) 2021.04.05
node 게시판 만들기2 (2021.04.01) - 정리 진행중  (0) 2021.04.01
docker 설치 방법  (0) 2021.03.27
node 게시판 만들기 정리(2021.03.25)  (0) 2021.03.25
DFS 소스코드 이해(생각 정리)  (0) 2021.03.17