[MongoDB] Mongoose Middleware

유동균·2023년 1월 29일
0

MongoDB

목록 보기
10/12
post-thumbnail
  • Mongoose는 특정 작업 실행 전후(특정 Mongoose Method 호출 전후)에 코드를 실행할 수 있게 해줌.

  • 따라서 어떤 것이 삭제되거나 저장되기 직전이나 함수를 호출할 때도 코드를 실행할 수 있다.

  • 작업할 수 있는 전체 목록을 볼 수 있고 pre 혹은
    post hook(데이터 전송 과정에서의 전처리 ) 혹은 미들웨어를 실행할 수 있다.

  • 메소드를 만들땐, 스키마를 모델화 하기 전에 정의한다.

const mongoose = require("mongoose");

mongoose.set("strictQuery", true);

mongoose
  .connect("mongodb://localhost:27017/shopApp")
  .then(() => {
    console.log("Connection Open!!!");
  })
  .catch((err) => {
    console.log("ERROR!!!!!!!!!!!!!");
    console.log(err);
  });

const { Schema } = mongoose;
const personSchema = new Schema({ first: String, last: String });

personSchema.virtual("fullName").get(function () {
  return `${this.first} ${this.last}`;
});

// Middleware function
personSchema.pre("save", async function () {
  console.log("About To Save!!!");
});
personSchema.post("save", async function () {
  console.log("Just Saved!!!!!!");
});

const Person = mongoose.model("Person", personSchema);
## (REPL)

> node -i -e "$(< index.js)"
Welcome to Node.js v18.13.0.
Type ".help" for more information.
> Connection Open!!!
> const k = new Person({first: "Kristen", last: "Sun"})
undefined
> k.save()
Promise {
  <pending>,
  [Symbol(async_id_symbol)]: 540,
  [Symbol(trigger_async_id_symbol)]: 5
}
> About To Save!!!
Just Saved!!!!!!
  • save 다음에 실행되었는지 확인하기
...

personSchema.pre("save", async function () {
  this.first = "YO";
  this.last = "MAMA";
  console.log("About To Save!!!");
});

...
> node -i -e "$(< index.js)"
Welcome to Node.js v18.13.0.
Type ".help" for more information.
> Connection Open!!!
> const hong = new Person({first:"GILDONG",last:"HONG"})
undefined
> hong
{
  first: 'GILDONG',
  last: 'HONG',
  _id: new ObjectId("63d6a06f7c36674a834912d9")
}
> hong.save().then(p => console.log(p))
Promise {
  <pending>,
  [Symbol(async_id_symbol)]: 708,
  [Symbol(trigger_async_id_symbol)]: 706
}
> About To Save!!!
Just Saved!!!!!!
{
  first: 'YO',
  last: 'MAMA',
  _id: new ObjectId("63d6a06f7c36674a834912d9"),
  __v: 0
}

0개의 댓글