[MongoDB] Mongoose - 미들웨어

Zero·2023년 3월 14일
0

MongoDB

목록 보기
14/14

미들웨어 (Middleware)

데이터에서의 미들웨어 사용은 사용자가 저장하기 전 어떠한 규칙이 적용되었는지 체크할 수 있고 암호 같은 경우 보안이 중요하기에 저장하기전 어떠한 함수를 부여한 후 POST 되게 할 수 있는 역할을 한다

미들웨어(Middleware,pre,post hook)는 비동기 함수를 실행하는 동안 제어가 전달되는 함수로 미들웨어는 스키마 수준에서 지정되며 플러그인 작성에 유용하다.

  • Mongoose는 특정 작업 실행 전후에 코드를 실행하게 해준다
  • 어떤 것이 삭제되거나 저장되기 직전이나 함수를 호출할 때도 코드를 실행할 수 있다
  • 작업할 수 있는 전체 목록을 볼 수 있고, 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);

const zz = new Person({first:"za" last"zero"})
zz.save()

--> 결과
About To Save!!!
Just Saved!!!

this를 이용해 접근하기

personSchema.pre("save", async function () {
  this.first = "YO";
  this.last = "MAMA";
  console.log("About To Save!!!");
});
  • pre를 이용하여 first,last에 각각 YO, MAMA값으로 변경값을 할당했다. 해당 프로그램을 실행하면 ?
const park = new Person({first:"zerozae", last:"PARK"})
park
{
 	first:"zerozae",
    last:"PARK",
    _id: new ObjectId~~~~
}
park.save().then(m => console.log(m))
 
--> 결과
About To Save!!!
Just Saved!!!!!
{
	first:"YO",
  	last:"MAMA",
  	_id:new ObjectId~~~~
  	__v: 0
}

0개의 댓글